通过跳过缺少的列

时间:2017-03-06 04:01:59

标签: python-2.7 csv

我有一个有序元组列表,每个元组包含要写入csv的列名和值对,例如

lst = [('name','bob'),('age',19),('loc','LA')]

在洛杉矶有一个19岁的位置和位置的位置。我希望能够根据列名将其写入CSV文件,有时会丢失其中一些列,例如另一行。

lst2 = [('name','bob'),('loc','LA')] 年龄缺失,我如何在python中正确地将这些行写入csv?

2 个答案:

答案 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)

现在您可以为列表中的每个项目调用此函数。这应该可以帮助您入门。