【问题标题】:How to check if an item in a list appears in csv?如何检查列表中的项目是否出现在csv中?
【发布时间】:2017-04-10 22:12:05
【问题描述】:

我有一个物品清单:

List = ['apple', 'banana', 'orange']

还有一个 csv 文件:

apple
kiwi
banana
orange
pear

我正在尝试查看列表中的每个项目是否与 csv 的第一列匹配,如果匹配,则在行尾附加一个“1”(否则附加一个“0”),但是我有点失落。下面的代码几乎就是我想要得到的最终结果。

apple, 1
kiwi, 0
banana, 1
orange, 1
pear, 0

我是 非常 python 新手,非常感谢任何帮助!谢谢

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    我尝试了下面的代码,它将结果存储在 CSV 中

    import csv
    
    lists = ['apple', 'banana', 'orange']
    nf = csv.writer(open("output.csv", "w"))
    with open('input.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
            if(''.join(row) in lists):
                nf.writerow([''.join(row),1])
            else:
                nf.writerow([''.join(row),0])
    

    CSV 格式的输出

    apple,1
    kiwi,0
    banana,1
    orange,1
    pear,0    
    

    【讨论】:

    • @hsifyllej 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。
    【解决方案2】:

    也许是这样的。它会从 csv 中读取数据,计算每个水果在列表中出现的次数,然后用新数据覆盖 csv 文件。

    import csv
    
    List = ['apple', 'banana', 'orange']
    data = []
    filename = 'file.csv'
    
    with open(filename, newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            data.append(row)
    
    for item in List:
        for fruit in data:
            if item in fruit:
                fruit[1] = int(fruit[1]) + 1
    
    with open(filename, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(data)
    

    【讨论】:

      【解决方案3】:

      请注意,您的 csv 文件是纯文本文件。但也是一个有效的 csv,所以我会把它当作一个。

      逐行读取并使用三元表达式在数据旁边打印 0 或 1。快速简单,无需字典或计数器并保留订单:

      import csv
      
      List = {'apple', 'banana', 'orange'}
      
      with open("csv.csv") as f:
          cr = csv.reader(f)
          for row in cr:
              print("{}, {}".format(row[0],1 if row[0] in List else 0))
      

      因为它不是真正的 csv,所以基本的逐行读取也可以:

      List = {'apple', 'banana', 'orange'}
      
      with open("csv.csv") as f:
          for item in f:
              item = item.strip()
              print("{}, {}".format(item,1 if item in List else 0))
      

      请注意,在这两个示例中,我都使用了set,而不是list。当有很多项目时,速度会有所不同。

      【讨论】:

        【解决方案4】:

        您可以使用 Python 标准库中的 csv 模块轻松实现此目的,特别是 the csv.reader() method.

        import csv
        
        fruit_list = ['apple', 'banana', 'orange']
        fruit_in_file = {}
        
        with open('csv_file.csv', 'r') as csvfile:
            fruit_reader = csv.reader(csvfile)
            for row in fruit_reader:
                fruit = row[0]
                if fruit in fruit_list:
                    fruit_in_file[fruit] = 1
                else:
                    fruit_in_file[fruit] = 0
        
        print(fruit_in_file)
        >>> {'apple': 1, 'kiwi': 0, 'orange': 1, 'banana': 1, 'pear': 0}
        

        实现这一点后,从您的问题看来,您想要编写一个包含此数据的 csv 文件,因此我们将遍历我们的 dict 并使用 csv.writer() method. 写入 csv 文件:

        with open('new_csv_file.csv', 'w') as csvfile:
            fruit_writer = csv.writer(csvfile)
            for key, value in fruit_in_file.items():
                fruit_writer.writerow([key, value])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-17
          • 2018-02-25
          • 2019-07-26
          • 2011-09-02
          • 2017-12-21
          • 2021-09-14
          相关资源
          最近更新 更多