所以我有一个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.writer
的writerows()
方法和传递一个发电机表达。
# 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] 删除。
我来说两句