Python docx AttributeError:“ WindowsPath”对象没有属性“ seek”

时间:2018-12-03 10:19:50

标签: python python-3.x attributeerror python-docx

我想将约250张图像及其文件名插入docx文件。

我的test.py文件:

from pathlib import Path
import docx
from docx.shared import Cm

filepath = r"C:\Users\Admin\Desktop\img"
document = docx.Document()

for file in Path(filepath).iterdir():
#    paragraph = document.add_paragraph(Path(file).resolve().stem)
    document.add_picture(Path(file).absolute(), width=Cm(15.0))

document.save('test.docx')

调试后,出现此错误:

Exception has occurred: AttributeError
'WindowsPath' object has no attribute 'seek'
  File "C:\Users\Admin\Desktop\test.py", line 10, in <module>
    document.add_picture(Path(file).absolute(), width=Cm(15.0))

如何避免此错误?

4 个答案:

答案 0 :(得分:1)

您需要将文件对象转换为 Path 方法的字符串类型。

for file in Path(filepath).iterdir():
# Paragraph = document.add_paragraph(Path(file).resolve().stem)
    document.add_picture(Path(str(file)).absolute(), width=Cm(15.0))

答案 1 :(得分:1)

简单地将路径对象转换为字符串:

for file in Path(filepath).iterdir():
    path_str = str(Path(file).absolute())
    document.add_picture(path_str, width=Cm(15.0))

使用 WindowsPath 对象作为输入的问题似乎是 document.add_picture 不知道如何使用它来打开文件。 seek 是一个文件对象的方法。

答案 2 :(得分:0)

您是否尝试过使用io.FileIO

from io import FileIO

from pathlib import Path
import docx
from docx.shared import Cm

filepath = r"C:\Users\Admin\Desktop\img"
document = docx.Document()

for file in Path(filepath).iterdir():
#    paragraph = document.add_paragraph(Path(file).resolve().stem)
    document.add_picture(FileIO(Path(file).absolute(), "rb"), width=Cm(15.0))

document.save('test.docx')

在将文件路径传递到PdfF​​ileReader时,使用PyPDF2遇到了相同的错误。当我像这样FileIO将PDF文件包装在FileIO(pdf_path, "rb")中时,错误消失了,我能够成功处理该文件。

答案 3 :(得分:0)

在我的情况下,将路径中的'/'更改为'/'可以解决问题。例如:“ C:/ Users / Admin / Desktop / img” (我相信这可能是将其包装在FileIO中的功能,但是在我的情况下,这样做不起作用)

您也可以使用

os.path.join(mydir, myfile)

如此处https://stackoverflow.com/a/2953843/11126742

所述