我有一个有序元组列表,每个元组包含要写入csv的列名和值对,例如
lst = [('name','bob'),('age',19),('loc','LA')]
在洛杉矶有一个19岁的位置和位置的位置。我希望能够根据列名将其写入CSV文件,有时会丢失其中一些列,例如另一行。
lst2 = [('name','bob'),('loc','LA')] 年龄缺失,我如何在python中正确地将这些行写入csv?
答案 0 :(得分:1)
这些元组可用于初始化dict
,因此csv.DictWriter
似乎是最佳选择。在此示例中,我创建了一个填充了默认值的dict
。对于每个元组列表,我复制dict,用已知值更新并写出来。
import csv
# sample data
lst = [('name','bob'),('age',19),('loc','LA')]
lst2 = [('name','jane'),('loc','LA')]
lists = [lst, lst2]
# columns need some sort of default... I just guessed
defaults = {'name':'', 'age':-1, 'loc':'N/A'}
with open('output.csv', 'wb') as outfile:
writer = csv.DictWriter(outfile, fieldnames=sorted(defaults.keys()))
writer.writeheader()
for row_tuples in lists:
# copy defaults then update with known values
kv = defaults.copy()
kv.update(row_tuples)
writer.writerow(kv)
# debug...
print open('output.csv').read()
答案 1 :(得分:0)
您应该提供更多示例,以确定需要什么 - 如果ls2
中未给出位置,那么您想要写入csv的内容是什么?根据我的理解,你可以创建一个函数和默认参数:
import csv
def write_tuples_to_csv(name="DefaultName", age="DefaultAge", loc="Default location"):
writer = csv.writer(open("/path/to/csv/file", 'a')) # appending to a file
row = (name, age, loc)
writer.writerow(['name','num','location'])
writer.writerow(row)
现在您可以为列表中的每个项目调用此函数。这应该可以帮助您入门。