我有一个文本文件(a.txt)。这里只有一小部分:
ENSG00000060642.6 0,023999998 0,015999999 0,666666667 0,006410256 0,006410256 1,000000073 0,016393442 0,016393442 1 0,020202022 0,030303031 1,499999908
ENSG00000149136.3 0,03508772 0,01754386 0,5 0,068627447 0,029411765 0,428571456 0,078947365 0,065789476 0,833333396 0,066666663 0,066666663 1
ENSG00000104889.4 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0!
ENSG00000157827.15 0,055555556 0,037037037 0,666666667 0,032258064 0,048387095 1,5 0,150000006 0,024999999 0,16666665 0,222222224 0,037037037 0,166666667
ENSG00000146067.11 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0!
ENSG00000167700.4 0,299999982 0 0 0,071428567 0,071428567 1 0 0 #DIV/0! 0 0 #DIV/0!
ENSG00000172137.14 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0! 1 0 0
ENSG00000178776.4 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0! 0 0 #DIV/0!
我想过滤掉所有行,包括“#DIV / 0!”,即使只有一个“#DIV / 0!”,也要制作一个新的文本文件。
答案 0 :(得分:1)
with open('a.txt') as f, open('b.txt', 'w') as new_file:
new_file.writelines([line for line in f if '#DIV/0!' not in line])
编辑:
这种方法可能是最快的。但正如之前与@martineau所讨论的那样,根据文件的大小,这可能不是最好的答案。
list comprehension
[line for line in f if '#DIV/0!' not in
在python中很常见,它取代了这段代码:
line]
l = []
for line in f:
if '#DIV/0!' not in line:
l.append(line)
但它更加优化(请参阅此处获取解释:Efficiency of list comprehensions)
list comprehension
将所有内容加载到内存中,因此可以
在大量数据的情况下导致缓冲区溢出。
这就是为什么在这里,当您不确定要处理多少数据时,使用增量方法(@ martineau')更安全?
答案 1 :(得分:1)
你可以这样做,这是增量的(因此它不会一次将整个文件读入内存):
from itertools import ifilter
with open('a.txt', 'r') as inf, open('new.txt', 'w') as outf:
outf.writelines(ifilter(lambda line: '#DIV/0!' not in line, inf))
答案 2 :(得分:0)
for line in open('a.txt').read().splitlines():
if '#DIV/0!' not in line:
print(line)
答案 3 :(得分:0)
state.go