我正在遵循《用Python自动化乏味的东西》这本书,但是在尝试运行此简单脚本时收到错误消息。
import PyPDF2
pdfFileObj = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
完整的错误消息是:
runfile('D:/Python files/PyPDF2/PyPDF2.py', wdir='D:/Python files/PyPDF2')
Traceback (most recent call last):
File "<ipython-input-4-caab1b8716b0>", line 1, in <module>
runfile('D:/Python files/PyPDF2/PyPDF2.py', wdir='D:/Python files/PyPDF2')
File "C:\Users\cjwu\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\Users\cjwu\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "D:/Python files/PyPDF2/PyPDF2.py", line 22, in <module>
import PyPDF2
File "D:\Python files\PyPDF2\PyPDF2.py", line 25, in <module>
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
AttributeError: module 'PyPDF2' has no attribute 'PdfFileReader'
谢谢您的帮助!
答案 0 :(得分:0)
从此:
runfile('D:/ Python文件/PyPDF2/PyPDF2.py',wdir ='D:/ Python文件/ PyPDF2')
似乎您将文件命名为 PyPDF2.py ,该文件名与 PyPDF2 包相同。不要这样做,因为这将与从实际的 PyPDF2 软件包中导入的内容冲突。
从Module Search Path文档中:
导入名为
spam
的模块时,解释器首先搜索 具有该名称的内置模块。如果找不到,则进行搜索 在目录给定的目录列表中找到名为spam.py
的文件 变量sys.path
。
...
包含正在运行的脚本的目录位于 搜索路径的开始,在标准库路径之前。这个 表示将加载该目录中的脚本而不是模块 在库目录中具有相同名称。
因此,当您这样做时:
import PyPDF2
PyPDF2.PdfFileReader(pdfFileObj)
import
命令将从您的 PyPDF2.py 中查找PdfFileReader
,因为它导入了您的 PyPDF2.py 而不是实际的 PyPDF2 软件包。您可以在PyPDF2.__file__
之后打印import
来检查它,它应该显示当前脚本的路径。
只需将文件命名为其他名称。
示例:
PyPDF2.py -> mypdfapp.py
实际上,我还建议重命名父文件夹(也是 PyPDF2 )。
示例:
D:/ Python文件/PyPDF2/PyPDF2.py -> D:/ Python文件/project01/mypdfapp.py