编辑以包含完整代码:程序基础--获取ID/EMAIL/密码的CSV文件,并创建dictionary1。在路径中创建ID/ dictionary2。
使用Dictionary2在Dict1中查找密码,应用加密,最后在Dict1中使用电子邮件。在这一点上我被困在加密部分了。
我读过一些关于需要打开文件的问题和谷歌文章,但我不知道如何打开“输出”项.
错误:
Traceback (most recent call last):
File "CommissionSecurity.py", line 54, in <module>
output.write(outputStream)
File "build\bdist.win-amd64\egg\PyPDF2\pdf.py", line 472, in write
AttributeError: 'tuple' object has no attribute 'write'代码:
import os
import re
import csv
import PyPDF2
# Create a dictionary with the csv values
EmailDict = dict()
with open('commissionrepemaillist.csv', 'r') as infile:
reader = csv.reader(infile)
for row in reader :
REP = row[0]
EMAIL = row[1]
PASSWORD = row[2]
EmailDict[REP] = EMAIL, PASSWORD
# create dictionary of IDs and Pdf Files
FileDict = dict()
path = "C:\\Apps\\CorVu\\DATA\\Reports\\AlliD\\Monthly Commission Reports\\Output\\pdcom1"
for FILE in os.listdir(path):
split = re.split("[_.]", FILE)
ID = split[1]
FileDict[ID] = FILE
for ID in FileDict:
# print REP
# print ID # debug: REP always coming over 764
if ID in EmailDict :
#print FileDict[ID]
path = "C:\\Apps\\CorVu\\DATA\\Reports\\AlliD\\Monthly Commission Reports\\Output\\pdcom1\\"
file = open(os.path.join(path + FileDict[ID]), 'rb')
output = PyPDF2.PdfFileWriter()
input = PyPDF2.PdfFileReader(file)
print ID, EmailDict[ID][1] # returning the correct value for encryption
output.encrypt(EmailDict[ID][1])
outputStream = (file, "wb")
output.write(outputStream)
output.close()
input.close()
else : continue发布于 2015-11-18 19:47:56
outputStream = (file, "wb")这只会创建一个包含文件和字符串的元组。PDF写入方法不知道如何处理任意的元组,它需要一个类似文件的对象。您可能希望打开该文件以便编写:
outputStream = open(file.name, "wb")现在,从现有的文件对象中获取名称并重用它可能不是最好的方法。生成文件路径一次,然后重用该文件以打开原始文件,然后再次使用该路径写入您处理过的PDF文件。
此外,您的代码将通过使用文件上下文管理器进行改进。
with open(file, "wb") as outputStream:
output.write(outputStream)这样,您的文件将在语句末尾关闭,您的文件资源将被正确处理。它还降低了代码维护成本,因为您不需要对文件执行open和close语句,就像现在为您所做的那样。
https://stackoverflow.com/questions/33788717
复制相似问题