将字典数据写入csv或excel的最佳方法

时间:2017-10-15 11:11:52

标签: python excel csv dictionary

我正在尝试将字典数据写入csv文件。

键:

['file_name', 'candidate_skills', 'SF_name', 'RB_name', 'mb_number', 'email']

词典

{'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': 'aartisingh271294@gmail.com'}

我原以为每个字典都会在新行的每个值中写入

'file_name'  'candidate_skills'  'SF_name'   'RB_name'   'mb_number'     'email'

我得到的结果只是单列:

file_name,Aarti Banarashi.docx
candidate_skills,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']"
SF_name,
RB_name,aarti banarashi
mb_number,['+918108493333']
email,aartisingh271294@gmail.com

你能帮我写一下吗?此外,当我添加新记录时,它应该附加

我的代码:

with open('dict.csv', 'wb') as csv_file:
    writer = csv.writer(csv_file)
    for key, value in res.items():
        writer.writerow([key, value])

预期输出

enter image description here

2 个答案:

答案 0 :(得分:0)

您的脚本正在迭代字典中的每个键值对,然后为每对调用writerow()writerow()将为您提供一个新行,因此以这种方式多次调用它将为您提供每行一行。

res仅包含CSV文件中单行的数据。使用csv.DictWriter(),对writerow()的单个调用会将所有字典条目转换为单个输出行:

import csv

res = {'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': 'aartisingh271294@gmail.com'}
fieldnames = ['file_name', 'candidate_skills', 'SF_name', 'RB_name', 'mb_number', 'email']

with open('dict.csv', 'wb') as f_file:
    csv_writer = csv.DictWriter(f_file, fieldnames=fieldnames)
    csv_writer.writeheader()
    csv_writer.writerow(res)

将输出dict.csv文件作为:

file_name,candidate_skills,SF_name,RB_name,mb_number,email
Aarti Banarashi.docx,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']",,aarti banarashi          ,['+918108493333'],aartisingh271294@gmail.com

通过显式传递fieldnames会强制输出中列的顺序为您提供的内容。如果排序不重要,您可以使用fieldnames=res.keys()

答案 1 :(得分:0)

一旦你使用桌子我就推荐pandas。

这是大熊猫的解决方案:

d = {'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': 'aartisingh271294@gmail.com'}

import pandas as pd
df = pd.DataFrame.from_dict(d, orient='index').T
df.to_csv("output.csv",index=False)

输出:

file_name,candidate_skills,SF_name,RB_name,mb_number,email
Aarti Banarashi.docx,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']",,aarti banarashi          ,['+918108493333'],aartisingh271294@gmail.com