从CSV文件导入/导出嵌套字典

nothisispatrick11

所以我有一个CSV文件,其数据排列如下:

X,a,1,b,2,c,3
Y,a,1,b,2,c,3,d,4
Z,l,2,m,3

我想导入CSV来创建嵌套字典,所以看起来像这样。

data = {'X' : {'a' : 1, 'b' : 2, 'c' : 3}, 
        'y' : {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4},
        'Z' : {'l' : 2, 'm' :3}}

在我编写的程序中更新字典后(我已经弄清楚了那部分),我希望能够将字典导出到相同的CSV文件中,以覆盖/更新它。但是,我希望它与以前的CSV文件具有相同的格式,以便我可以再次导入它。

我一直在研究导入,到目前为止

import csv
data = {}
with open('userdata.csv', 'r') as f:    
    reader = csv.reader(f)
    for row in reader:
       data[row[0]] = {row[i] for i in range(1, len(row))}

但这不起作用,因为事情安排不正确。一些数字是其他数字的子项,字母不正确,等等。我什至还没有到达导出部分。有任何想法吗?

马蒂诺

由于您对保留顺序不感兴趣,因此应该可以使用相对简单的方法:

import csv

# import
data = {}
with open('userdata.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        a = iter(row[1:])
        data[row[0]] = dict(zip(a, a))

# export
with open('userdata_exported.csv', 'w') as f:
    writer = csv.writer(f)
    for key, values in data.items():
        row = [key] + [value for item in values.items() for value in item]
        writer.writerow(row)

后者可以通过使仅单个呼叫到更有效地进行一点点csv.writerwriterows()方法和传递一个发电机表达

# export2
with open('userdata_exported.csv', 'w') as f:
    writer = csv.writer(f)
    rows = ([key] + [value for item in values.items() for value in item]
            for key, values in data.items())
    writer.writerows(rows)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章