目标=打开文件、加密文件、写入加密文件。
尝试使用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
4条答案
按热度按时间vwhgwdsa1#
我认为您的问题可能是由于您使用相同的文件名来打开和写入文件,打开了两次:
w
模式将截断文件,因此第二行截断输入。我不确定你的意图是什么,因为你不能真的尝试从文件的开头读取,同时覆盖它。即使你尝试写文件的结尾,你也必须把文件指针放在某个地方。所以创建一个额外的输出文件,用不同的名字;你总是可以在两个文件都关闭后将输出文件重命名为输入文件,从而覆盖你的输入文件。
或者,您可以先将整个文件读入内存,然后再写入:
注:
inputStream
,但从未使用过它PdfFileWriter()
赋值给output
,然后在下一行将其他值赋值给output
,因此,您从未使用过第一行的结果。请仔细检查您正在执行的操作,因为它认为您的代码还有许多其他问题。
或者,这里有一些其他的提示可能会有所帮助:
documentation建议您也可以使用文件名作为PdfFileReader的第一个参数:
stream-一个文件对象或支持标准读取和查找方法的对象,类似于文件对象。也可以是一个表示PDF文件路径的字符串。
所以试试看:
您还可以尝试将
strict
参数设置为False
:strict(bool)-确定是否应警告用户所有问题,并使某些可纠正的问题成为致命问题。默认值为True。
例如:
q7solyqu2#
使用open(file,“rb”)导致了这个问题,因为PdfFileReader()是自动执行的。我只是删除了with语句,这样就纠正了这个问题。
pftdvrlh3#
由于PDF文件是空的,所以出现了这个错误。我的PDF文件是空的,这就是为什么我的错误出现了。所以首先,我用一些数据填充我的PDF文件,然后开始使用PyPDF2.PdfFileReader读取它,
而且它解决了我的问题!
thtygnil4#
晚了,但是,您可能正在打开一个无效的PDF文件或名为x.pdf的空文件,您认为它是一个PDF文件