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() 返回的内容)。