2012-06-11 29 views
2

我有一個非常大的.csv文件(10GB),並希望根據元組中的不同條件提取行。
每行的第四列包含IPAdd
我只需要提取具有特定IP的行。Python:如何根據元組中指定的多個條件從csv文件提取行

我是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) 
+1

你可以用'grep'過濾文件到達前的Python。 –

+1

如果您要對其進行復雜的查詢,您可能需要考慮將此csv更改爲真實的數據庫。 10gb csv是瘋了! – Daenyth

回答

1

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

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

然後你就可以說:

if customer[3] in ips: 
+2

其實我會用'set'或'frozenset',因爲對於那些'in'運算符要快得多,順序無關緊要。 –

+0

使用ChipJust指示的語法工作正常....查詢掛在數據庫上,因爲結果集對於數據庫來說總是太大。所以我更喜歡使用python來提取我需要的內容並將其記錄到另一個csv中。謝謝你的幫助.. – user1449309

+0

@ user1449309:我會研究新的數據庫軟件。這不是一個大數據集。 – Daenyth

1
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) 
相關問題