基于Python中的列表从CSV文件中删除条目
我有一个CSV文件,其中包含以下内容:基于Python中的列表从CSV文件中删除条目,python,python-2.7,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文件有任何一个字从列表中删除 我知道这样做的一种方法是读取csv文件的每一行,循环到_remove,查看该行中是否存在任何单词,如果没有匹配项
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文件有任何一个字从列表中删除
我知道这样做的一种方法是读取csv文件的每一行,循环到_remove,查看该行中是否存在任何单词,如果没有匹配项,则将该行保存到另一个文件中
但是,我在csv文件和to_remove列表中都有很多条目(分别约为21000和300)。因此,我需要一种在Python中高效地实现它的方法
我没有访问群集的权限,因此基于map reduce的选项不是一个选项
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()
测试。在
中:
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
grep-Ev'(Fun | Gravy)filename
您可以尝试使用正则表达式或简单地并行化代码。你能做的只有这么多。巨大的操作总是以某种方式巨大。fin.readlines()
会将整个文件读入内存。不完全是OP想要的。