作者:草业学院16级草坪1班团支部s_b9w | 来源:互联网 | 2023-10-10 12:45
我正在尝试将csv文件写入其中具有键作为标题的标题,并且每个标题都是要分别写入标题的列表。
import csv
found_items = {'a':['a','b','c','d'],'b':['af','fr']}
with open('results.csv','a') as outfile:
writer = csv.writer(outfile)
writer.writerow(found_items.keys())
writer.writerows(zip(*found_items.values()))
到目前为止,我有2个问题,第一个问题是,如果列表长度不相等,它将仅写入最小的长度
我遇到的第二个问题是,当我使用'a'附加到文件时,它将写在下面。我想做的是添加更多列。
即以下内容会给我
a,b
a,af
b,fr
当我再次写入文件时
found_items = {'c':['1a','2b','ss']}
输出是这个
a,fr
c
1a
2b
ss
理想情况下,输出将为3列,标题将包含列表中的所有元素
我的预期输出如下:
a,b,c
a,af,1a
b,fr,2b
c,ss
d,
因此,要解决您的第一个问题,请zip
时两个列表的长度都相同,否则元素将被丢弃。这是一个简单的修复程序,如下所示,使用zip_longest
import csv
from itertools import zip_longest
found_items = {'a':['a','b','c','d'],'b':['af','fr']}
with open('results.csv','a') as outfile:
writer = csv.writer(outfile)
writer.writerow(found_items.keys())
writer.writerows(zip_longest(*found_items.values()))
现在第二部分中,我们将不得不使用pandas
来获得所需的结果。
import pandas as pd
df = pd.read_csv('results.csv')
print(df)
a b
0 a af
1 b fr
2 c NaN
3 d NaN
to_write = pd.concat([df,pd.DataFrame(found_items)],axis=1)
print(to_write)
a b c
0 a af 1a
1 b fr 2b
2 c NaN ss
3 d NaN NaN
to_write.to_csv('results.csv',index=False)
最后,当我们查看文件时,我们看到它以预期的格式出现。
==> cat results.csv
a,b,c
a,af,1a
b,fr,2b
c,ss
d,