我有一个很大的数据库作为文本文件(大约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)行上运行,因此可以使其运行得更快。
答案 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并行进行工作。