问题描述
我正在使用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
“内存中”文件给Document()
。
docx_file
中的Document(docx_file)
参数可以是str
的文件路径,也可以是类似文件的对象(使用open(...)
创建的打开文件或内存中的文件io.BytesIO
创建的文件,但不能是bytes
对象(file.read()
返回的对象)。