我有一个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的选项。
答案 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