如何将这个字典列表转换为CSV文件?
我有一个字典列表,长得像这样:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
我应该怎么做才能把它转换成一个看起来像这样的csv文件:
name,age,weight
bob,25,200
jim,31,180
8 个回答
19
这段话是在说你有一个字典列表的时候:
import csv
with open('names.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
39
在Python 3中,事情稍微有些不同,但其实更简单,也不容易出错。建议你在处理CSV文件时,告诉程序用utf8
编码打开文件,这样数据在不同地方使用时会更方便(前提是你没有使用更严格的编码,比如latin1
)。
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
- 需要注意的是,在Python 3中使用
csv
模块时,必须加上newline=''
这个参数,否则在用Excel或OpenCalc打开CSV文件时,会出现空行。
另外,我更喜欢使用pandas
模块中的CSV处理工具。我发现它对编码问题更宽容,而且当加载文件时,pandas会自动把CSV中的字符串数字转换成正确的类型(比如整数、浮点数等)。
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
注意:
- 如果你给pandas一个文件路径,它会帮你打开文件,并且在Python 3中默认使用
utf8
编码,同时也会自动识别表头。 - 数据框(dataframe)和CSV文件的结构不完全一样,所以在加载后你需要加一行代码来得到相同的内容:
dataframe.to_dict('records')
- pandas还让你更容易控制CSV文件中列的顺序。默认情况下,列是按字母顺序排列的,但你可以指定列的顺序。如果使用普通的
csv
模块,你需要提供一个OrderedDict
,否则列的顺序会是随机的(如果你在Python 3.5之前工作)。想了解更多,可以查看这个链接:在Python Pandas数据框中保持列的顺序。
474
在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。比如,有人可能会在使用某个库时发现它的功能不太符合自己的需求,或者在使用过程中遇到了一些错误。这种情况下,通常可以通过查看文档、搜索相关问题或者在社区论坛上提问来找到解决办法。
另外,很多时候,其他开发者可能也遇到过类似的问题,他们会在像StackOverflow这样的地方分享他们的经验和解决方案。因此,查找这些资源是非常有帮助的,可以让我们更快地解决问题,提升自己的编程能力。
总之,遇到问题时,不要慌张,先尝试自己查找资料,看看有没有人遇到过类似的情况,通常都会找到一些有用的信息。
import csv
to_csv = [
{'name': 'bob', 'age': 25, 'weight': 200},
{'name': 'jim', 'age': 31, 'weight': 180},
]
keys = to_csv[0].keys()
with open('people.csv', 'w', newline='') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(to_csv)