【发布时间】:2020-05-27 05:51:48
【问题描述】:
我知道这个问题已经被问过好几次了。但是这些解决方案在这里真的对我没有帮助。我有一个非常大的文件(大约 5GB)要读取、获取数据并将其提供给我的神经网络。我必须逐行阅读。起初我使用 .readlines() 函数将整个文件加载到内存中,但这显然导致了内存不足的问题。接下来我没有将整个文件加载到内存中,而是逐行读取它,但它仍然没有工作。所以现在我正在考虑将我的文件拆分成更小的文件,然后读取每个文件。对于每个序列,我都有一个以“>”开头的文件格式,后跟一个序列,例如:
>seq1
acgtccgttagggtjhtttttttttt
tttsggggggtattttttttt
>seq2
accggattttttstttttttttaasftttttttt
stttttttttttttttttttttttsttattattat
tttttttttttttttt
>seq3
aa
.
.
.
>seqN
bbbbaatatattatatatatattatatat
tatatattatatatattatatatattatat
tatattatatattatatatattatatatatta
tatatatatattatatatatatatattatatat
tatatatattatatattatattatatatattata
tatatattatatattatatatattatatatatta
所以现在我想将包含 12700000 个序列的文件拆分为更小的文件,这样对于每个带有标题“>”的文件也有正确的对应序列。如何在 python 中实现这一点而不会遇到内存问题。见解将不胜感激。
【问题讨论】:
-
几个问题:在您的示例中,一些
>后面有一个空格,而另一些则没有。文件也是这样,还是更标准化?在你的标题中,你说“在特定点”——你想如何限制新文件(例如,在某个字符数之后,在这么多序列之后,等等)?我可以看到在 for 循环中使用 while 循环来完成此操作,但可能还有更聪明的方法使用模式和索引。 -
是的,我在写这个例子时犯了一个错误。所以它没有空间。我也编辑过。所以我在想每个文件有 5000 个序列。我怎样才能做到这一点?
-
你能解释一下你的逐行方法出了什么问题,也许可以发布代码吗?如果您正确执行此操作,则与读取
n较小的文件相比应该没有任何区别。
标签: python-3.x