PyPDF2 IO错误:[Errno 22] PyPdfFileReader上的参数无效Python 2.7

mkh04yzy  于 2022-12-21  发布在  Python
关注(0)|答案(4)|浏览(211)

目标=打开文件、加密文件、写入加密文件。
尝试使用PyPDF 2模块来完成此操作。我已经验证了“input”是一个文件类型对象。我已经研究了此错误,它被翻译为“file not found”。我相信它以某种方式链接到文件/文件路径,但不确定如何调试或排除故障。并得到以下错误:

Traceback (most recent call last):
  File "CommissionSecurity.py", line 52, in <module>
    inputStream = PyPDF2.PdfFileReader(input)
  File "build\bdist.win-amd64\egg\PyPDF2\pdf.py", line 1065, in __init__
  File "build\bdist.win-amd64\egg\PyPDF2\pdf.py", line 1660, in read
IOError: [Errno 22] Invalid argument

下面是相关代码。我不知道如何纠正这个问题,因为我不知道是什么问题。任何指导是赞赏。

for ID in FileDict:
        if ID in EmailDict : 
            path = "C:\\Apps\\CorVu\\DATA\\Reports\\AlliD\\Monthly Commission Reports\\Output\\pdcom1\\"
            #print os.listdir(path)
            file = os.path.join(path + FileDict[ID])

            with open(file, 'rb') as input:
                print type(input)
                inputStream = PyPDF2.PdfFileReader(input)
                output = PyPDF2.PdfFileWriter()
                output = inputStream.encrypt(EmailDict[ID][1])
            with open(file, 'wb') as outputStream:
                output.write(outputStream)  
        else : continue
vwhgwdsa

vwhgwdsa1#

我认为您的问题可能是由于您使用相同的文件名来打开和写入文件,打开了两次:

with open(file, 'rb') as input :
    with open(file, 'wb') as outputStream :

w模式将截断文件,因此第二行截断输入。
我不确定你的意图是什么,因为你不能真的尝试从文件的开头读取,同时覆盖它。即使你尝试写文件的结尾,你也必须把文件指针放在某个地方。所以创建一个额外的输出文件,用不同的名字;你总是可以在两个文件都关闭后将输出文件重命名为输入文件,从而覆盖你的输入文件。
或者,您可以先将整个文件读入内存,然后再写入:

with open(file, 'rb') as input:
    inputStream = PyPDF2.PdfFileReader(input)
    output = PyPDF2.PdfFileWriter()
    output = input.encrypt(EmailDict[ID][1])
with open(file, 'wb') as outputStream:
    output.write(outputStream)

注:

  • 您指定了inputStream,但从未使用过它
  • PdfFileWriter()赋值给output,然后在下一行将其他值赋值给output,因此,您从未使用过第一行的结果。

请仔细检查您正在执行的操作,因为它认为您的代码还有许多其他问题。
或者,这里有一些其他的提示可能会有所帮助:
documentation建议您也可以使用文件名作为PdfFileReader的第一个参数:
stream-一个文件对象或支持标准读取和查找方法的对象,类似于文件对象。也可以是一个表示PDF文件路径的字符串。
所以试试看:

inputStream = PyPDF2.PdfFileReader(file)

您还可以尝试将strict参数设置为False
strict(bool)-确定是否应警告用户所有问题,并使某些可纠正的问题成为致命问题。默认值为True。
例如:

inputStream = PyPDF2.PdfFileReader(file, strict=False)
q7solyqu

q7solyqu2#

使用open(file,“rb”)导致了这个问题,因为PdfFileReader()是自动执行的。我只是删除了with语句,这样就纠正了这个问题。

with open(file, 'rb') as input:
    inputStream = PyPDF2.PdfFileReader(input)
pftdvrlh

pftdvrlh3#

由于PDF文件是空的,所以出现了这个错误。我的PDF文件是空的,这就是为什么我的错误出现了。所以首先,我用一些数据填充我的PDF文件,然后开始使用PyPDF2.PdfFileReader读取它,
而且它解决了我的问题!

thtygnil

thtygnil4#

晚了,但是,您可能正在打开一个无效的PDF文件或名为x.pdf的空文件,您认为它是一个PDF文件

相关问题