Bac*_*kus 136 python csv dictionary data-conversion
我有一个字典列表,看起来像这样:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将其转换为如下所示的csv文件:
name,age,weight
bob,25,200
jim,31,180
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 249
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
Run Code Online (Sandbox Code Playgroud)
编辑:我以前的解决方案不处理订单.正如Wilduck所说,DictWriter在这里更合适.
ham*_*med 15
这是你有一个字典列表:
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'})
Run Code Online (Sandbox Code Playgroud)
Pandas 的简短解决方案
import pandas as pd
list_of_dicts = [
{'name': 'bob', 'age': 25, 'weight': 200},
{'name': 'jim', 'age': 31, 'weight': 180},
]
df = pd.DataFrame(list_of_dicts)
df.to_csv("names.csv", index=False)
Run Code Online (Sandbox Code Playgroud)
因为@User和@BiXiC在这里寻求UTF-8的帮助,这是@Matthew的解决方案的变体.(我不允许发表评论,所以我在回答.)
import unicodecsv as csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
csv在python 3中需要该newline=''参数,否则在excel / opencalc中打开时,CSV中会出现空白行。或者:我更喜欢在pandas模块中使用csv处理程序。我发现它对编码问题的容忍度更高,并且在加载文件时,pandas会自动将CSV中的字符串数字转换为正确的类型(int,float等)。
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Run Code Online (Sandbox Code Playgroud)
注意:
utf8python3中的名称,并找出头文件。dataframe.to_dict('records')csv模块,您需要将其喂入,OrderedDict否则它们将以随机顺序出现(如果在python <3.5中工作)。有关更多信息,请参见:在Python Pandas DataFrame中保留列顺序。