在python中读/写字典到csv文件

Posted

技术标签:

【中文标题】在python中读/写字典到csv文件【英文标题】:Reading/Writing out a dictionary to csv file in python 【发布时间】:2016-03-21 22:39:17 【问题描述】:

python 新手,csv 文件的文档有点混乱。

我有一本如下所示的字典:

key1: (value1, value2)

key2: (value1, value2)

key3: (value1, value2)
....

我想以每行包含键,后跟两个值的格式将这些写入 csv 文件。

我还希望以后能够从文件中将它们读回到字典中。

【问题讨论】:

阅读此docs.python.org/3/tutorial,尝试自己解决,来这里(如果遇到问题)提出具体问题。 为什么是 CSV?如果要保存和加载,可以查看 picklejson 之类的内容。两者都有相当可靠的转储和加载方法,json 输出但用户可读。 我将在 excel 中使用这些值进行一些计算。但将在多个文件中使用,以便我可以保持运行总数。 提供一些代码,然后提供一个示例来说明您希望输出的样子。我想我可以看到它,但不完全确定。此外,如前所述,这可能不是最适合 csv 模块。如果不了解您的数据,您的结构对于阅读和写作都不是真正自然的。因此,具体而言,如果不进行操作,您将无法将其读回字典。我们使用 csv.DictWriter 和 csv.DictReader 但也这样做,因此我们必须确保我们的数据结构为字典列表,键是标题,值是单元格内容 a) value1, value2 数字还是字符串,在这种情况下,当您说要输出 key: value1, value2 时,可能需要引用它们(所以内部逗号不要'不要被误解)并可能转义(这样内部换行符就不会被误解)意思是key, value1, value2,这样代码必须知道它是用于字典的,或者说它是像key: value1, value2这样的字典的标准格式,比如pandas.to_csv会写吗? 【参考方案1】:

为此我强烈推荐Pandas。

转换为 Pandas 数据帧:

import pandas as pd

d = 
    'a': (1, 101),
    'b': (2, 202),
    'c': (3, 303)

df = pd.DataFrame.from_dict(d, orient="index")

创建一个 CSV 文件:

df.to_csv("data.csv")

将 CSV 文件作为 DataFrame 读回:

df = pd.read_csv("data.csv", index_col=0)

将DataFrame转换回原来的字典格式:

d = df.to_dict("split")
d = dict(zip(d["index"], d["data"]))

编辑:既然您提到您的目标是在 Excel 中使用输出文件,Pandas to_excel() 和 read_excel() 可能对您更有用,因为它们可以更好地保留转换之间的内容。 此外,您可能希望完全跳过 Excel 并使用 standard Python scientific stack。

【讨论】:

使用pandas的好方法是to_csv,不需要open命令,参考我的回答。 不想听起来很挑剔,但有谁知道如何只使用裸 python 来做到这一点?作为python的初学者,真的不想使用其他包。 如果您正在寻找依赖关系最小的东西,那么 itsneo 的答案可能就是您的目标。 我更喜欢这个答案而不是所选答案。 使用index=False 可能对大多数用户有帮助。【参考方案2】:

我没有发现在这里使用 Pandas 有足够的好处,因为问题很简单。

还要注意 OP,如果您想将值存储到文件中只是为了读取它,只需使用 JSON 或 Python 的搁置模块。仅当我们需要与潜在的 Excel 用户交互时,才应尽量减少导出为 CSV。

以下代码将字典转换为 CSV

value1 = 'one'
value2 = 'two'
d =  
        'key1': (value1, value2), 
        'key2': (value1, value2), 
        'key3': (value1, value2)
    
CSV ="\n".join([k+','+','.join(v) for k,v in d.items()]) 
#You can store this CSV string variable to file as below
# with open("filename.csv", "w") as file:
    # file.write(CSV)

这段代码解释了列表推导中发生的事情。

CSV = ""
for k,v in d.items():
    line = ",\n".format(k, ",".join(v))
    CSV+=line
print CSV 

【讨论】:

这看起来更像是我能理解的东西。那么在你写“for k,v in d.items()”的地方,v 参数(假设值的标签)是否会自动发现那里有 2 个值(一个元组)?即这个打印键,值1,值2? 是的,v 被假定为一个元组,",".join 表示用逗号连接这些元组变量。我已经用 for 循环详细说明了列表理解。希望这会更容易,更易读。【参考方案3】:

我会使用 pandas,它可以在一行中完成:

import pandas as pd

dic = 'key1':['v1','v2'], 'key2':['vv','gg']

pd.DataFrame(dic).T.reset_index().to_csv('myfile.csv', header=False, index=False)

【讨论】:

以上是关于在python中读/写字典到csv文件的主要内容,如果未能解决你的问题,请参考以下文章

在csv文件中写字典

为啥自己的r语言中读不了xlsx文件

Python 怎么在csv文件中加入一列数据

Python csv模块(读写文件)

Python 怎么在csv文件中加入一列数据

python怎么读取csv文件