我正在学习“用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'谢谢你的帮助!
发布于 2019-02-21 23:57:35
由此:
runfile('D:/Python文件/PyPDF2 2/PyPDF2 2.py‘,wdir='D:/Python文件/PyPDF2 2’)
您似乎将您的文件命名为PyPDF2.py,它与PyPDF2包的名称相同。不要这样做,因为这将与来自实际PyPDF2包的导入发生冲突。
来自模块搜索路径文档:
当导入名为
spam的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,则在变量spam.py提供的目录列表中搜索名为sys.path的文件。 ..。 包含正在运行的脚本的目录位于搜索路径的开头,位于标准库路径的前面。这意味着将加载该目录中的脚本,而不是库目录中同名的模块。
所以当你这么做的时候
import PyPDF2
PyPDF2.PdfFileReader(pdfFileObj)import命令将从PyPDF2.py中查找PdfFileReader,因为它导入了PyPDF2.py,而不是实际的PyPDF2包。您可以通过在PyPDF2.__file__ ing之后打印import来检查它,这将显示到当前脚本的路径。
只需将您的文件命名为其他内容即可。
示例:
PyPDF2.py -> mypdfapp.py
实际上,我还建议重命名父文件夹(也是PyPDF2)。
示例:
D:/Python /PyPDF2 2/PyPDF2.py-> D:/Python /project01 01/mypdfapp.py
https://stackoverflow.com/questions/54817513
复制相似问题