我有一个Python中的字典(最新版本)的问题。 这里是我的字典: [ {dict1} , {dict2} , ... ]
所有字典是类似于:问题Python写作 - 读取字典的CSV
{'Date': '2016-10-17',
'Message_body': ' Version française BUSINESS EVENTS - SPRING 2016 April 5: YESS EVENT ON SCALING UP Robin Bonsey, Hystra Consultant, will discuss business solutions to the predicament of small holder farmer',
'Sender': '[email protected]',
'Subject': 'Fwd: Inclusive business events - spring 2016'}
。
根据Python,每个值(type(dict1['Message_body'])
)的'类型'是“str”。 我的问题是将此词典词典转换为CSV文件(使用密钥'Date' , 'Message_body' , 'Sender', 'Subject'
)。 这里是我的代码:
def export_dict_list_to_csv(data, filename):
with open(filename, 'w',encoding='utf-8',newline='') as f:
# Assuming that all dictionaries in the list have the same keys.
headers = sorted([k for k, v in data[0].items()])
csv_data = [headers]
for d in data:
csv_data.append([d[h] for h in headers])
writer = csv.writer(f)
writer.writerows(csv_data)
export_dict_list_to_csv(final_list, 'chili.csv')
它工作得很好,但错字很奇怪。 例如,在.csv中,我有“Chaque moi voudraitêtrele tyran de tous les autres»dit Pascal dans lesPensées”,而不是“Chaque moi voudraitêtretyran de tous les autresàdit Pascal dans lesPensées ”。在“str”形式中,我有“良好的错字”,但在.csv中,它不是很好的错字(我不知道为什么)。如果“读取”CSV文件恢复“str”的良好初始输入错误,则此问题并不重要。
但我没有成功读取正确的CSV创建... 我想:
with open('chili.csv', 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
print (row)
,我得到错误“的UnicodeDecodeError:‘ASCII’编解码器不能解码位置字节0xc3 1087:序数不在范围内(128)”
,我尝试:
with open('/Users/Marco/HandB/Gmail/chili.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
print (row)
错误:(?你以文本模式打开文件),迭代器应该返回字符串,而不是字节
所以我有2个问题: 1)我写CSV文件的方式是一种好方法吗?为什么我在CSV上有一个奇怪的错字?
2)如何读取之前创建的CSV? 我在互联网上搜索了几个小时,但我没有找到任何特别的东西来帮助我解决这个问题。特别是,我不太清楚围绕“编码”问题的所有问题,我只知道字典中的值是str类型,我认为它们是UTF-8格式。 下面是代码:(我清理“数据”,从GMAIL API收到)
mssg_parts = payld['parts'] # fetching the message parts
part_one = mssg_parts[0] # fetching first element of the part
part_body = part_one['body'] # fetching body of the message
part_data = part_body['data'] # fetching data from the body
clean_one = part_data.replace("-","+") # decoding from Base64 to UTF-8
clean_one = clean_one.replace("_","/") # decoding from Base64 to UTF-8
clean_two = base64.b64decode (bytes(clean_one, 'UTF-8')) # decoding from Base64 to UTF-8
soup = BeautifulSoup(clean_two , "lxml")
soup = BeautifulSoup(clean_two, "html")
soup.get_text()
mssg_body = soup.body()
# mssg_body is a readible form of message body
# depending on the end user's requirements, it can be further cleaned
# using regex, beautiful soup, or any other method
temp_dict['Message_body'] = mssg_body
我写下这给我提供了“新的讯息”的一部分,因为它可以帮助你理解的格式的代码消息及其转换为CSV文件。
非常感谢! :)
看来你是在python3上。尝试像这样设置编码:'open('/ Users/Marco/HandB/Gmail/chili.csv','r',encoding ='utf-8')as csvfile:' –
谢谢coldspeed for your answer !你说得对,实际上它和“编码”一起工作,错字很好! ^^最后一个问题:我如何重新创建一个“字典”这个“阅读CSV”?谢谢:) – Eliot
已经发布了一个答案。如果您觉得有帮助,请考虑将其标记为已接受。 –