2014-01-25 70 views
0

名單我有一個具有下列內容的CSV文件上形成CSV文件一種有效的方法是從csv文件中刪除具有列表中任何一個單詞to_remove的所有行。刪除條目基於Python中

我知道這樣做是讀取CSV文件的每一行,遍歷to_remove查看是否有任何的話是存在於線與線保存到另一個文件,如果沒有匹配的一種方式。

但是,我在csv文件和to_remove列表中都有很多條目(分別約爲21000和300)。所以我想要一個在Python中使用它的有效方法。

我沒有權限訪問集羣,因此基於map-reduce的選項不是選項。

+2

'grep的-ev '(FUN |肉汁)' filename' – devnull

+0

你可以嘗試正則表達式或簡單地parallelise代碼。只有很多你可以做。巨大的操作永遠是這樣或那樣的巨大。 –

回答

1
toremove = ['Fun','Gravy'] 
with open('test.in','r') as fin, open('test.out','w') as fout: 
    for i in filter(lambda x:not any(i for i in toremove if i in x), fin.readlines()): 
     fout.write(i) 

with open('test.out') as fout: 
    print fout.read() 

test.in

Apple,Bat 
Apple,Cat 
Apple,Dry 
Apple,East 
Apple,Fun 
Apple,Gravy 
Apple,Hot 
Bat,Cat 
Bat,Dry 
Bat,Fun 

[出來:]

Apple,Bat 
Apple,Cat 
Apple,Dry 
Apple,East 
Apple,Hot 
Bat,Cat 
Bat,Dry 
+0

'fin.readlines()'會將整個文件讀入內存。不完全是OP想要的。 –