【问题标题】:Write tuple to csv by skipping missing columns通过跳过缺失的列将元组写入 csv
【发布时间】:2017-03-06 04:01:59
【问题描述】:

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

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

其中包含 bob,19 岁,地点,loc,在洛杉矶。我希望能够根据列名将其写入 CSV 文件,有时其中一些列会丢失,例如另一行。

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

【问题讨论】:

    标签: python-2.7 csv


    【解决方案1】:

    这些元组可用于初始化dict,因此csv.DictWriter 似乎是最佳选择。在此示例中,我创建了一个填充有默认值的 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()
    

    【讨论】:

      【解决方案2】:

      您应该提供更多示例,说明究竟需要什么——如果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)
      

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

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 2012-07-24
        • 2014-08-14
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 2019-01-01
        • 2017-07-28
        • 2010-10-08
        相关资源
        最近更新 更多