模块“ PyPDF2”没有属性“ PdfFileReader”

时间:2019-02-21 22:52:44

标签: python-3.x

我正在遵循《用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'

谢谢您的帮助!

1 个答案:

答案 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