我是 python 新手,所以如果这个例子是微不足道的,我深表歉意。
我正在尝试编写一个简单的脚本,它将两个大型数据文件(每个约 40gb)的一部分粘贴并提取到一个格式稍有改变的结果文件中。我最初尝试使用 readlines(),但它会将所有文件读入内存,而我们的实例只有 28gb 的内存。使用 sizehint 参数仅解析文件的一部分。
我现在正在遍历文件。问题是我将文本解析的输出存储在三个变得相当大的列表中,使可用内存黯然失色。我认为这只会切换到使用交换,这很好,但它只是以“MemoryError”退出。
这适用于小样本文件,但会影响我们的实际数据。
剧本:
import sys
a = []
b = []
c = []
file1 = open(sys.argv[1],"r")
for line in file1:
if '@' in line:
a.append(line.lstrip('@').rstrip('\n'))
b.append(file1.next().rstrip('\n'))
file1.close()
file2 = open(sys.argv[2],"r")
for line in file2:
if '@' in line:
c.append(file2.next().rstrip('\n'))
file2.close()
file3 = open(sys.argv[3],"w")
for i in xrange(len(a)):
file3.write("".join([">",a[i],'\n',b[i],":",c[i],"\n"]))
我在网上找到的建议创建某种数据库来存储变量,但这不是必需的。你有什么想法我应该如何处理这个?
为了完整起见,这就是我想要做的(来自我们的示例测试数据:
file1:
@Read.Salmonella_paratyphi_A_chromosome.29004.4835/1
TCGTGTACAGCATTCTTTATAGTGGAACGGTGACCGTACCGCAAAGCTGCGAAATCAACGCCGGACKIPPTCGTAG
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
file2:
@Read.Salmonella_paratyphi_A_chromosome.29004.4835/1
TCGTGTACAGCATTCTTTATAGTGGAACGGTGACCGTACCGCAAAGCTGCGAAATCAACGCCGGACAAACGATTCT
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
file3 (output):
>Read.Salmonella_paratyphi_A_chromosome.29004.4835/1
TCGTGTACAGCATTCTTTATAGTGGAACGGTGACCGTACCGCAAAGCTGCGAAATCAACGCCGGACKIPPTCGTAG:TCGTGTACAGCATTCTTTATAGTGGAACGGTGACCGTACCGCAAAGCTGCGAAATCAACGCCGGACAAACGATTCT