【问题标题】:python pair multiple field entries from csvpython对来自csv的多个字段条目
【发布时间】:2018-04-02 22:28:00
【问题描述】:

尝试从 csv 中获取数据,如下所示:
col1 col2
eggs sara
bacon john
ham betty

每列中的项目数可能不同,也可能不相同。 Col1 可能有 25 个,而 col2 可能有 3 个。或者相反,或多或少。

循环遍历每个条目,使其输出到这样的文本文件中

早餐_1
早餐项目鸡蛋
人萨拉

早餐_2
早餐项目培根
人萨拉

早餐_3
早餐项目火腿
人萨拉

早餐_4
早餐项目鸡蛋
人约翰

早餐_5
早餐项目培根
人约翰

早餐_6
早餐项目火腿
人约翰

早餐_7
早餐项目鸡蛋
贝蒂人

早餐_8
早餐项目培根
贝蒂人

早餐_9
早餐项目火腿
贝蒂人

因此脚本需要添加“早餐”编号并循环遍历每个早餐项目和人员。 我知道如何创建一个组合,但不知道如何将每个组合配对? 任何有关如何执行此操作的提示都会非常有帮助。

【问题讨论】:

  • 创建一个组合的代码是什么?

标签: python csv text


【解决方案1】:

如果我正确理解您的问题,您可以执行以下操作(从列中获取值后,我想您知道该怎么做):

from itertools import product
with open('file.txt', 'w') as f:
    for i, pair in enumerate(product(your_csv_col1, your_csv_col2)):
        f.write('breakfast_%i\nbreakfast_item %s\nperson %s\n\n' % (i, pair[0], pair[1]))

【讨论】:

    【解决方案2】:

    我必须指出,由于输入数据的结构不合理,您的问题变得更加困难。 .csv 文件中的一行意味着该行中的数据项之间存在某种联系。但是您正在阅读两个完全不同的领域。那应该是两个文件。然而:

    import csv
    
    food_items = []
    guests = []
    with open('data.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if row['col1']:
                food_items.append(row['col1'])
            if row['col2']:
                guests.append(row['col2'])
    
    breakfast = 0
    for guest in guests:
        for food_item in food_items:
            breakfast += 1
            print (f"breakfast_{breakfast}\nbreakfast_item {food_item}\nperson {guest}\n")
    

    编辑:替代 print 调用 Python 2.7 或 3.5

            print ("breakfast_{0}\nbreafast_item {1}\nperson {2}\n".format(breakfast,food_item,guest))
    

    【讨论】:

    • 感谢您的快速回复。在打印行上获取无效语法。如果在 2 个 .csvs 中更好/更容易获得数据,那么可以轻松完成。
    • @thinguy 这个语法错误意味着你使用的是 Python 3.5 或更早版本,或者 Python 2。我已经换了一个 print() 调用。
    【解决方案3】:

    首先,从所有早餐项目中分清。

    如下所示的伪代码

    遍历每一行 在 2 个不同的列表中收集项目和人员 在这两个列表上做一组 说人、物 Counter = 1 for person in persons: for item in items: Print "breafastitem", Counter Print person, item

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多