目标=打开文件,加密文件,写入加密文件 尝试使用PyPDF2模块来完成此任务。我已经验证了这个"输入"是一个文件类型对象。我已经研究过这个错误,它转换为"找不到文件"。我相信它以某种方式链接到文件/文件路径但不确定如何调试或故障排除。并收到以下错误:
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
答案 0 :(得分:2)
我认为您的问题可能是因为您使用相同的文件名来打开和写入文件,打开它两次:
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
分配其他内容。因此,您从未使用过第一个output =
行的结果。 请仔细检查您正在做什么,因为您觉得代码存在许多其他问题。
或者,以下是一些可能有用的提示:
documentation建议你也可以使用文件名作为PdfFileReader的第一个参数:
stream - 支持标准读取的File对象或对象 并寻找类似于File对象的方法。也可以是一个字符串 表示PDF文件的路径。
所以试试:
inputStream = PyPDF2.PdfFileReader(file)
您还可以尝试将strict
参数设置为False
:
strict(bool) - 确定是否应警告用户 问题也导致一些可纠正的问题是致命的。 默认为True。
例如:
inputStream = PyPDF2.PdfFileReader(file, strict=False)
答案 1 :(得分:1)
由于PDF文件为空而引发此错误。 我的PDF文件为空,这就是引起我的错误的原因。因此,首先,我用一些数据填充我的PDF文件,然后使用PyPDF2.PdfFileReader开始对其进行检索,
它解决了我的问题!!!
答案 2 :(得分:-1)
迟到了,您可能正在打开一个无效的 PDF 文件或一个名为 x.pdf 的空文件,并且您认为它是一个 PDF 文件