根据Python中的列表从CSV文件中删除条目

时间:2014-01-25 11:42:35

标签: python python-2.7

我有一个CSV文件,其中包含以下内容:

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

我还有一个如下列表:

to_remove=[Fun,Gravy,...]

我想要一种有效的方法来删除csv文件中包含列表中任何一个单词to_remove的所有行。

我知道一种方法是读取csv文件的每一行,循环访问to_remove以查看该行中是否存在任何单词,如果没有匹配则将该行保存到另一个文件。

但是,我在csv文件和to_remove列表中都有很多条目(分别约为21000和300)。所以我想要一种在Python中有效的方法。

我无法访问群集,因此无法选择基于map-reduce的选项。

1 个答案:

答案 0 :(得分: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