Trying to read a docx file using FastAPI and python-docx library: AttributeError: 'bytes' object has no attribute 'seek' error
Trying to read a docx file using FastAPI and python-docx library: AttributeError: 'bytes' object has no attribute 'seek' error
我正在使用 FastAPI(非异步)和 python-docx 库,试图读取 docx 文件。
我在尝试读取 docx 文件时遇到错误。
我的代码-
@app.post('/translate_docx', response_class=PlainTextResponse)
def translateDocx(docFile: UploadFile = File(...), fileExtension: str = Form(...)):
if(fileExtension == 'docx'):
raw_txt = readDocx(docFile.file.read())
return raw_txt
def readDocx(file):
doc = Document(file)
txt = ""
for para in doc.paragraphs:
txt = txt + para.text
return txt
日志:
File "/translateProject/.venv/lib/python3.7/site-packages/docx/opc/pkgreader.py", line 32, in from_file
phys_reader = PhysPkgReader(pkg_file)
File "/translateProject/.venv/lib/python3.7/site-packages/docx/opc/phys_pkg.py", line 101, in __init__
self._zipf = ZipFile(pkg_file, 'r')
File "/usr/lib/python3.7/zipfile.py", line 1258, in __init__
self._RealGetContents()
File "/usr/lib/python3.7/zipfile.py", line 1321, in _RealGetContents
endrec = _EndRecData(fp)
File "/usr/lib/python3.7/zipfile.py", line 259, in _EndRecData
fpin.seek(0, 2)
AttributeError: 'bytes' object has no attribute 'seek'
我的代码有什么问题?任何帮助都会有所帮助。
不要 .read()
给 Document()
的文件。只需给它文件名,或者你可以给它一个打开的文件,它的光标设置在偏移量 0 上。如果你拥有的“文件”已经是一个字节对象,那么你可以使用 io.BytesIO
"in-memory " 给 Document()
.
的文件
Document(docx_file)
中的docx_file
参数可以是str
文件路径,也可以是file-like对象(用open(...)
或使用 io.BytesIO
创建的 in-memory 文件),但它不能是 bytes
对象(file.read()
返回的内容)。
我正在使用 FastAPI(非异步)和 python-docx 库,试图读取 docx 文件。 我在尝试读取 docx 文件时遇到错误。
我的代码-
@app.post('/translate_docx', response_class=PlainTextResponse)
def translateDocx(docFile: UploadFile = File(...), fileExtension: str = Form(...)):
if(fileExtension == 'docx'):
raw_txt = readDocx(docFile.file.read())
return raw_txt
def readDocx(file):
doc = Document(file)
txt = ""
for para in doc.paragraphs:
txt = txt + para.text
return txt
日志:
File "/translateProject/.venv/lib/python3.7/site-packages/docx/opc/pkgreader.py", line 32, in from_file
phys_reader = PhysPkgReader(pkg_file)
File "/translateProject/.venv/lib/python3.7/site-packages/docx/opc/phys_pkg.py", line 101, in __init__
self._zipf = ZipFile(pkg_file, 'r')
File "/usr/lib/python3.7/zipfile.py", line 1258, in __init__
self._RealGetContents()
File "/usr/lib/python3.7/zipfile.py", line 1321, in _RealGetContents
endrec = _EndRecData(fp)
File "/usr/lib/python3.7/zipfile.py", line 259, in _EndRecData
fpin.seek(0, 2)
AttributeError: 'bytes' object has no attribute 'seek'
我的代码有什么问题?任何帮助都会有所帮助。
不要 .read()
给 Document()
的文件。只需给它文件名,或者你可以给它一个打开的文件,它的光标设置在偏移量 0 上。如果你拥有的“文件”已经是一个字节对象,那么你可以使用 io.BytesIO
"in-memory " 给 Document()
.
Document(docx_file)
中的docx_file
参数可以是str
文件路径,也可以是file-like对象(用open(...)
或使用 io.BytesIO
创建的 in-memory 文件),但它不能是 bytes
对象(file.read()
返回的内容)。