有没有一种方法可以加快此Python代码的速度,我正在读取多个GB的文本

时间:2020-01-14 18:47:54

标签: python python-3.x

我有一个很大的数据库作为文本文件(大约1GB),并且我试图将信息行设置为一行,以便能够对这些行进行一些数据分析。数据库的格式如下

>Title 1 Line
Data 1 Line
Data 1 Line
Data 1 line 
>Title 2 Line
Data 2 Line
Data 2 Line
Data 2 Line ....

我希望输出为

>Title 1 Line
Data 1 Line
>Title 2 Line
Data 2 Line

这是我执行此操作的代码:

#opening document using open 
Data = open("Dataset.txt", "r")

#defining file name for lines 

protein = Data.readlines()


#variable defining for rewrite

proteinfinal = ""

for line in protein:
    if ">" in line:
        proteinfinal += line
    else:
        proteinfinal += line.strip("/n")
#removing final and last to remove lines
#print(proteinfinal.strip())
#closing file 
Data.close()

# Make a new file
Data = open("Dataset.txt", "w")
#write to file 
Data.write(proteinfinal)
#close file
Data.close()

无论如何,它已经运行了一段时间,并且可以在几分钟内在数据集的较小子集(10,000)行上运行,因此可以使其运行得更快。

2 个答案:

答案 0 :(得分:1)

是的,不要使用readlines,直接遍历文件对象。更重要的是,不要使用+=来循环增加列表,这会使您产生二次行为。请尝试以下操作:

protein_parts = []
with open("Dataset.txt", "r") as f:
    for line in f:
        if ">" in line:
            protein_parts.append(line)
        else:
            protein_parts.append(line.strip("\n"))
proteinfinal = ''.join(protein_parts)

请注意,在这种情况下,您可能最快可以执行的操作如下:

with open("Dataset.txt", "r") as f_in, open("Dataset0.txt", "w") as f_out:
    for line in f_in:
        if ">" in line:
            f_out.write(line)
        else:
            f_out.write(line.strip("\n"))

现在有两个文件,但是如果必须保留旧名称,则可以执行以下操作:

import os
os.remove("Dataset.txt")
os.rename(""Dataset0.txt", "Dataset.txt")

答案 1 :(得分:0)

您可以尝试使用filesplit将文件拆分为较小的文件,然后使用MultiProcessing并行进行工作。