我遇到了一个尴尬的问题:我想解析一个较大的csv文件,将其中的某些信息封装(包括关键字列表“ err”),然后将内容存储到另一个csv文件中。
我要做的是以下事情:
with open('auswertung.json', 'w') as raus:
craus = csv.DictWriter(raus, ['entr', 'yr', 'err', 'lang', 'status',
'plat', 'os'], dialect='unix')
craus.writeheader()
leser = csv.reader(f)
for z in leser:
problems = []
kat = {'entr': z[0], 'yr': int(z[0][4:8]), 'err': None, 'lang': None,
'status': z[1], 'plat': None, 'os': None}
kat['err'] = ['one', 'two', 'three']
more stuff
craus.writerow(kat)
但是,该模块将'err'存储为
"['one', 'two', 'three']"
当我尝试在另一个程序中用DictReader读取它时。那是一个字符串...用list()强制转换会创建一个列表,其中所有字母都是列表成员。
这是一个错误还是不是要用csv存储值列表?我该如何解决?
“ unix”风格只是一个实验。默认样式不会改变任何内容
答案 0 :(得分:0)
这是一个错误
当然不是。
您可能会发现JSON比CSV格式z.B更适合您的需求。模具名称“ auswertung.json”表明您已经开始对此进行探索。当将每个元素序列化为CSV时,编写者将调用str()
。您可能会发现dumps()
(或转储)是您的朋友。
如果您愿意$ pip install pandas
,您可能会发现pd.to_csv()
是序列化一堆行(或pd.to_json()
)的便捷方法。
样式nit:最好每行列出一个值:
kat = dict(entr=z[0],
yr=int(z[0][4:8]),
err=None,
lang=None,
status=z[1],
plat=None,
os=None)