将数据从字典写入特定格式的csv文件

时间:2018-02-02 19:21:12

标签: python csv dictionary

我有一本字典:

dic = {"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M']}

我需要一个代码,将这些字典数据“写”到csv文件中:

HM1,Jackson,Matt,M,Football
SM2,Scott,Max,M

我有以下代码无效:

with open("file.csv", "w", newline="") as new_data:
    fieldnames = ['ID','Firstname','Lastname','Gender','Sports']
    data_writer = csv.DictWriter(new_data, fieldnames=fieldnames)

    for k in dic.keys():
        r = dic[k]
        data_writer.writerow({'ID':r[0],'Firstname':r[1],'Lastname':r[2],'Gender':r[3],'Sports':r[4]})

2 个答案:

答案 0 :(得分:1)

首先,确保您的列表具有相同的长度,

如果是这样,你必须将它转换为数据帧并使用pandas模块将数据帧转换为csv文件: 通过使用

来安装它
pip install pandas

并像这样导入:

import pandas as pd



df = pd.DataFrame({"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M', '']})
df = df.T 
df.to_csv('path_to_file.csv', header=False)

更新: 如果您的数据列表没有相同的长度,您可以像这样进行:

data_dict= {"HM1": ['Jackson','Matt','M','Football'], "SM2":['Scott','Max','M']}
df = pd.DataFrame(data=[x for x in data_dict.values()], index= data_dict.keys())
df.fillna('', inplace=True)
df.to_csv('path_to_file.csv', header=False)

答案 1 :(得分:0)

更正后的代码:

with open("file.csv", "w", newline="") as new_data:
    fieldnames = ['ID','Firstname','Lastname','Gender','Sports']
    data_writer = csv.DictWriter(new_data, fieldnames=fieldnames)

    data_writer.writeheader()
    for k,r in dic.items():        
        data_writer.writerow({fieldnames[i]: k if i == 0 else r[i-1] for i in range(len(r)+1)}) 

您原始代码中的一些问题:

1。)您从未在字典键中写过“ID”列 2.)您可以轻松迭代dic.items(),而r = dic[k]会返回键和项,而不是使用r。 3.)您的IndexError返回r[4],因为您的第二行缺少值,因此ID,Firstname,Lastname,Gender,Sports HM1,Jackson,Matt,M,Football SM2,Scott,Max,M, 会引发错误,列表长度仅为3.这可以很容易地动态处理相反,列表理解。

无论如何,输出

pandas

我建议你以某种方式处理列表中缺少的数据(比如'N / A')而不是仅仅留下不均匀长度的列表。另一个答案的csv解决方案很棒,但如果您对该模块或一般安装外部模块不满意,此解决方案仅支持{{1}}。