【问题标题】:Python: How to extract rows from a csv file based on multiple criteria specified in a tuplePython:如何根据元组中指定的多个条件从 csv 文件中提取行
【发布时间】:2012-06-11 15:54:08
【问题描述】:

我有一个非常大的 .csv 文件 (10GB),想根据元组中的不同条件提取行。
每行第四列包含 IPAdd
我只需要提取具有特定 IP 的行。

我是 python 新手,想知道如何遍历每个元组 IP 并将它们写入 WYE_Data.csv 文件。

CSV 文件的内容示例是;

xxx,1234,abc,199.199.1.1,1,fghy,xxx   
xxx,1234,abc,10.10.1.1,1,fghy,xxx   
xxx,1234,abc,144.122.1.1,1,fghy,xxx   
xxx,1234,abc,50.200.50.32,1,fghy,xxx

import csv   
customers = csv.reader(open('data.csv', 'rb'), delimiter=',')    
## This is the line I'm having         issues with   
IPAdd = ('199.199.1.1' or '144.122.1.1' or '22.22.36.22')
csvout = csv.writer(open('WYE_Data.csv', 'ab')) 

for customer in customers:   
    if customer[3] == IPAdd:    
        csvout.writerow(customer)

【问题讨论】:

  • 您可以使用grep 在文件到达 Python 之前对其进行过滤。
  • 如果您要对它进行复杂的查询,您可能需要考虑将这个 csv 更改为一个真实的数据库。 10gb csv 太疯狂了!

标签: python csv python-2.7


【解决方案1】:

我建议您使用要匹配 IP 的值列表。

ips = ['199.199.1.1', '144.122.1.1', '22.22.36.22']

那么你可以说:

if customer[3] in ips:

【讨论】:

  • 实际上我会使用setfrozenset,因为in 操作符要快得多并且顺序无关紧要。
  • 使用 ChipJust 指示的语法可以正常工作.... 查询挂在数据库上,因为结果集对于数据库来说总是太大。所以我更喜欢使用 python 来提取我需要的内容并将其记录到另一个 csv 中。谢谢你的帮助..
  • @user1449309:我会研究新的数据库软件。这不是一个大型数据集。
【解决方案2】:
import csv

look_for = set(['199.199.1.1', '144.122.1.1', '22.22.36.22'])

with open('data.csv','rb') as inf, open('wye_data.csv','wb') as outf:
    incsv = csv.reader(inf, delimiter=',')
    outcsv = csv.writer(outf, delimiter=',')
    outcsv.writerows(row for row in incsv if row[3] in look_for)

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 2022-09-23
    • 2016-12-06
    • 2020-08-11
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2020-11-13
    • 2021-09-26
    相关资源
    最近更新 更多