如何从包含python中特定字母表的大型文本文件(>;60GB)中删除所有行?

如何从包含python中特定字母表的大型文本文件(>;60GB)中删除所有行?,python,Python,我有一个大的文本文件(>60GB),我想从中删除某些行 文本文件包含: 352_0M, 352_1M, 0.913 500_1F, 452_0M, 0.500 870_0M, 400_1F, 0.980 601_1F, 470_0M, 0.630 845_0M, 900_1M, 0.456 100_1F, 250_0F, 0.123 ... 我想删除第一列或第二列或两者中包含“F”字母的所有行。预期产出为: 352_0M, 352_1M, 0.913 845_0M, 900_1M

我有一个大的文本文件(>60GB),我想从中删除某些行

文本文件包含:

352_0M, 352_1M,  0.913
500_1F, 452_0M,  0.500
870_0M, 400_1F,  0.980
601_1F, 470_0M,  0.630
845_0M, 900_1M,  0.456
100_1F, 250_0F,  0.123
...
我想删除第一列或第二列或两者中包含“F”字母的所有行。预期产出为:

352_0M, 352_1M,  0.913
845_0M, 900_1M,  0.456
如何在python中实现这一点?

使用numpy的解决方案

with open('input_file','r') as inf:
    with open('output_file','w') as outf:
        for line in inf:
            if not any('F' in x for x in line.split(',', 2)[:2]):
                outf.write(line)
import numpy as np
A = np.loadtxt('input_file',dtype=str,delimiter=', ')
id1 = [ 'F' not in a for a in A.T[0]]
id2 = [ 'F' not in a for a in A.T[1]]
B = A[np.bitwise_and(id1,id2)]
np.savetxt('file_out',B)
编辑:感谢Marcos和AMC的评论。当我认为我提出的解决方案快一点时,我纠正了自己:它不是!Błotosmętek的解决方案在性能和RAM使用方面都要好得多。我使用600GB的测试文件进行了检查,建议的numpy解决方案比Błotosmętek的解决方案差两倍

使用numpy的解决方案

import numpy as np
A = np.loadtxt('input_file',dtype=str,delimiter=', ')
id1 = [ 'F' not in a for a in A.T[0]]
id2 = [ 'F' not in a for a in A.T[1]]
B = A[np.bitwise_and(id1,id2)]
np.savetxt('file_out',B)

编辑:感谢Marcos和AMC的评论。当我认为我提出的解决方案快一点时,我纠正了自己:它不是!Błotosmętek的解决方案在性能和RAM使用方面都要好得多。我使用600GB的测试文件进行了检查,建议的numpy解决方案比Błotosmętek的解决方案差两倍

尝试使用python将文件拆分为多个部分,然后搜索特定的单词。处理大文件非常困难,因为它需要巨大的RAM容量。

尝试使用python将文件拆分为多个部分,然后搜索特定的单词。处理大文件是非常困难的,因为它需要巨大的RAM容量。

用一个简单但专门的工具,如
grep
来代替编写代码怎么样?
grep-v“F”,inputfile>outputfile
,可以将其限制在前两列,但它可以很好地处理示例数据?你试过什么,做过什么研究吗?堆栈溢出不是免费的代码编写服务。请参阅:,。使用一个简单但专门的工具(如
grep
)而不是编写代码如何?
grep-v“F”,inputfile>outputfile
),可以将其限制在前两列,但可以很好地处理示例数据。到底是什么问题?你试过什么,做过什么研究吗?堆栈溢出不是免费的代码编写服务。请参阅:,。为此,您需要超过60GB的RAM。我认为数组上的数字运算比普通python快一点,是的。感谢您的评论。您需要超过60GB的RAM。我认为数组上的数字运算比普通python快一点,是的。感谢您的评论