用Python脚本读取77gb文件到内存中扫描关键词,代码可以运行但是我的电脑内存不够

2024-10-01 07:50:24 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我有一个python脚本,它读取基本上是一个文本文件,扫描某些关键字-然后打印到屏幕上,不幸的是,我正在读入程序的一个文本文件是77GB,所以当我的计算机用完交换空间时,这个过程会自动终止

代码:

import re

listofspecies = open("bacreduced.txt").readlines()

listofseqs = open("Bac16s.faa").readlines()

for x in listofspecies:
    for i in range(0,len(listofseqs)):
        #print (i)
        names = x.split("_")
        if re.findall(names[0].strip(), listofseqs[i]):
            if re.findall(names[1].strip(), listofseqs[i]):
                print (">" + x + listofseqs[i+1].strip())
                break

输入:

.txt文件只是一个物种名称的列表,用这样的新行隔开(但更大):

^{pr2}$

大文件采用fasta格式,如下所示:

>Methanothermobacter_thermautotrophicus
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------G--G-C---G--G----------------A--G-G-C----T-----A---C---T---G---C----T------------A-----T----T-----G----G---G------G---T-----T----C----G-------A-----T----------------T----------A-----------A--G--C---C-------A---T---G-C----A--A--G-T-C-Ga--A-CGagcacctcggtgct----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------CG-T---G--G--C----G---A--A---C-----G--G--C--T--C---A------G----T---A---A-----C--A--C--G----T---G--G--A--T-----A---------A----C-C-----T-------------G-------C--C--C---T---T--G--G----G-------A------C---C--G---G--------G----A-----T--------A------A--C---C----C--C---G-G---G-----A---A------------------------------------------A-------------------------------------------------C-T----G-G----G-----G---A--T--A-----A----A-C-------------C--C-G-G--A-------T----A--G--G--T---G---A-A--G-A-T----GCC---T-G--G----A-AT------G-G-T----------G---C--T-T----C--A---C--C------C----A--AAc--ACCtccg----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GG-T-G--C--C--C----A--A----G-G--A----T------G-G--G--T----C-T-G--C--G--G---C--C--G---A----T-T---A----G-G---T-----A---G--T-T-G--G--T--A--G--G-----G-T---A--A------------C---G-------------------------------------------------G---------------------------------------C-C-----T--A--C--C----A--A-----G-C--C---C---A--T--C-A------T-----C-G--G--T--A-----C-G-G-----G---T--T--G--T----G------A---G--A----G--C--A-A------G----A---G---C-C--C-----G--------G-A-G---A---T----G---G--A---A-C-------C------T-----G-------A---G--A-----C-------A------------------A--G----------G---T---T--C--C--A-----------G----G---C--Cc---T-------------A---C-G-----G-------G-G--C---G---C---A---------G-C---A--G--G-C---G-----------------C---G--------A----A--------A----C--C-------T--C------C--G------C-----------------------------------------------------------------------------------------------A------A-----T--G--C----A-C---G----C--A-------A----------------------------G-T--G---C--G---A----C-G------G----G--G----G-A----A---C---C-----C--C--A----A----G-------T--G--C-C-----A-C-TCTTaacgg------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GG-T-----G--G--C-----T--T--T---T----C--A------G-A--A--G-T-----G---T--A---A-A------------------------------------A-------------------------A------G-C----T--T-C-------------T-G----------------G----AA------TA---A----G-G-------G------C---T--G-----G------------G------C----A-----------------------------------------A--------------------------------------------G------------------------------------A----C----C--G---G-------T-------------------------------------------------G----C--C--------------------------------------------------A----G----C-------C-----------------------------------------------------G--C--C--------------------------------------G--C---G----G----T--------A-A--C--A----C--C--G---G------C--A--G--C--T--C--A-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------A-G--T--G--G--T--A--G---C--C-----G-----C---------T---T--T--T--A--T--T-----G--G---G---C----C---T----A-----A-A----G----C--G----T-C------C-----G--T-----A---G--C--C------G-----G--T--C---T--G---A--T-------A--A--G--T--C---T--C--T----G-G---T-G----A-----------------------A--A---T--C-C---C---A---C--A--G-----C---------------------------------T-T------------------------A-A--------------C--T--G---T--G---G--GAAt------T-G-C--T-------G-G-A----G----A--T---A-----C--T--------A-T--C--At--G--A--C----------T------C------G------A--G---G---T--C--G--G--G--A-----G--A----G--G--C--T--G-G--A----------------------------------------------------------------------------------------------------------------------------------------------------G-G---T---A--------C--T---C--C--C---A---G--G-----G----T-------A---G--G-G-----G---T--G-----------------A----A-A-------------------------------------------------------------T-C---C---T----G--T--A--A--T-----C--C---T------G---G--G---A---G----G-A---------------------------------C--C-A----C-----C----------------------------------T--G---------T------------------------------------G--G--C-----G--------------------------------------------A---------------------------------------------------A---------------------------------------------G----------------------------------------------------G--C-----------G---T-C-C--A-----G-C----T---G------------------G--A--A--C---G--A--A--C--C--T-------G--A--C------G-G----T-----G--A--G---------------------G--G--A--C----G----A---A-----A---G---C---C---A--G-G----G----G-------------------------------------C--G--C----G---------------------------------------------------------------------A---------------------------------------------------------------------------------------------A----C---C--G-----G----A------------------------------T--T--A--G-------------------------------------------A---------------------------------------------------------------------------------------------------------------T----------------------------------------------------------------------------------------------------A--------------------------------C-----------------------------------------------------------------------------------------------------------------------------------C---C--G--G--G--T----A----------------------------------------------------------------------------------G-T----------------------------------C---C---T--G--G---C--------C-------G---T----A---A------------------------A--------C---------G--A----T------G-T---G------G------A--C----------T------------------------T-----G---G---T---G-------T----T----G---G-----G---A---T-----G----G--C------T--T---C--G--A-----------------G--C---T---G-----C--C--C--C---A----G---T-----G----C-C----------G----------A------A--G--G--G---------A--A----------------------------------G-C--T---G---T--T----A--A---------G----T--C--C----A---C-----C-----------G-----C----C----T---G--G---G----A------A---G--T-----A----C--G-G--C---C-----G---C--A---A---------------------------------------G--G---C--T---G----A--A--A-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C--T---T----A--A----A----G---G---A---------A----T---T---G---G---C--G----G---G---G--G--A--G--C--A-------C----C--A--C------A--------------A----C--G-C--G--T---G---G-A---G---C--C--T--G----C--G-G--T--------T------------T-----A------A---T--T--G--G----A------T---T---C-----A-A--C----G--------------------------------------C--C---G---G--A-------C------A----------------------------------------T------------C--T------------------------------------------------------------------C-----A----C-C---A--G----G--G--G-----C-----------G-----A--C--A-G-C------AG---T---------------A------T--G---A---T----G--G---C------C---A--G-G-----T-----T--G--------A-----T----G-------A-----------C--C--T--T--G----C--T-----TG--A---C-A-A--------G-C---T-G-------A----G-----A-----G---G-------A--G-G-T-G----C----A-T-G-G-C--C---G-C--C--G---T------------------------------------C---------------------------------------------------------------------------------------------------------------------------------------------A-G--C---T-C-G---T-----A--C--C------G-T----------G----------------------------------------------------A--------------------------------------------G--G--C--G-----T--C-C-T-G---T----T------A---------------------------------------------A------------------------------------------------G----T----------C-A---G--G-C---A-----A-C-G--A--G---C---G--A-------G----A------C-C--C--A--C------------G-C-C--C--T-T--A--A------T----T--------A-C-C---AG--C-G--------G------A--A-C-CC--------T---------Tatg--------------GGTTg---C----------------------------C-G----------------G-G--C------A-C-A----------------C---T---A--A--G--G--G--G------------------------------------------A---C---C-G---C----C--A-G-T-Ga-----TAA--------------------A-C--T-G---G--A--G-G---A-A-G-G-A---------------------------------------------G--T--G--G--A--C--G-A------------------------------------------C-G-G--T---A----G---G-T--C-C-G-T-A-------------------------------------------------------------------------------------T---G-C-C--------C-C---G-----A-A--T--------C-C-C--C--T--G-G-G---C-A--------A--C---A---C---G-C--G-G-G--C---T-A-C-A-A--T--G-G-C-C--T--G-G----A-C--A--A-T-G-G-G----T---------TCC---G-----A--C--A-C--T-----G--A-A--A----G-G-T---G---G---A---------------G-G--T-A-A--T--C--CC-Ct--AAA---C-C--A---G---G---T-C------G---T-A---G--T--T-C--G-G-----A--T--C----G---A--G--G-G---C-----T-G-----T-----A--A--C-T--C-------G--C-C-C--T---C-G-T--GA-A---G-C-T--G---G-A--A--T--G--C-G--T-----A---G----T--A----A-T--C--G--C--G--T--G--------T-C-------A-------------------------T----T-A-T------------------------------------C--G--C--G--C-----G--G--T-----G-----A--A--T--A-C------G--T--C--C---C----T-----G---C--T---C------C--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>Metallosphaera_hakonensis
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C-C---G--G----------------A--C-C-C----G-----A---T---C---G---C----T------------A-----T----A-----G----G---G------G---T-----A----G----G-------G-----A----------------T----------A-----------A--G--C---C-------A---T---G-G----G--A--G-T-C-Gt--A-CGctctcgggaagaggg---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------CG-T---G--G--C----G---G--A---C-----G--G--C--T--G---A------G----T---A---A-----C--A--C--G----T---G--G--C--T-----A---------A----C-C-----T-------------G-------C--C--C---T---T--G--G----G-------A------C---C--C---G--------G----A-----T--------A------A--C---C----C--C---G-G---G-----A---A------------------------------------------A-------------------------------------------------C-T----G-G----G-----G---C--T--A-----A----T-C-------------C--G-G-G--G-------C----A--G--A--T---A---A-G--G-G-G----ATC---T-G--G----A-AC------G-A-C----------C---T--C-T----T--A---T--C------T----A--AAt--GCCtcccggctgatcccgtcggga-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GG-T-G--C--C--C----A--A----G-G--A----T------G-G--G--G----C-T-G--C--G--G---C--C--C---A----T-C---A----G-G---C-----T---G--T-T-G--G--G--G--G--A-----G-T---A--A------------A---G-------------------------------------------------G---------------------------------------T-C-----C--C--C--C----A--A-----A-C--C---G---A--T--A-A------C-----G-G--G--T--A-----G-G-G-----G---C--C--G--T----G------G---G--A----G--C--G-G------G----A---G---C-C--C-----C--------C-A-G---T---T----G---G--G---C-A-------C------T-----G-------A---G--A-----C-------A------------------A--G----------G---G---C--C--C--A-----------G----G---C--Cc---T-------------A---C-G-----G-------G-G--C---G---C---A---------C-C---A--G--G-C---G-----------------C---G--------G----A--------A----C--G-------T--C------C--C------C-----------------------------------------------------------------------------------------------A------A-----T--G--C----G-G---G----A--A-------A----------------------------C-C--G---T--G---A----G-G------G----C--G----T-T----A---C---C-----C--C--T----A----G-------T--G--C-C-----C-T-CGCAa----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GA-G-----G--G--C-----T--T--T---T----C--T------C-C--A--C-T-----T---T--A---G-A------------------------------------A-------------------------C------G-G----T--G-G-------------A-G----------------G----AA------TA---A----G-C-------G------G---G--G-----G------------G------C----A-----------------------------------------A--------------------------------------------G------------------------------------A----C----T--G---G-------T-------------------------------------------------G----T--C--------------------------------------------------A----G----C-------C-----------------------------------------------------G--C--C--------------------------------------G--C---G----G----T--------A-A--T--A----C--C--A---G------C--C--C--C--G--C--G-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------A-G--T--G--A--T--C--G---G--G-----A-----C---------G---T--T--T--A--T--T-----G--G---G---C----T---T----A-----A-A----G----C--G----C-C------C-----G--T-----A---G--C--C------G-----G--C--C---T--G---T--A-------A--A--G--T--C---A--C--C----G-T---T-T----A-----------------------A--A---G--A-C---C---C---G--G--G-----C---------------------------------T-C------------------------A-A--------------C--T--C---G--G---G--GAA-------C-G-G--C-------G-G-T----G----A--T---A-----C--T--------T-A--C--A---G--G--C----------T------A------G------G--G---G---G--C--G--G--G--A-----G--A----G--G--T--C--G-G--A----------------------------------------------------------------------------------------------------------------------------------------------------G-G---T---A--------C--T---C--C--C---G---G--A-----G----T-------A---G--G-G-----G---C--G-----------------A----A-A-------------------------------------------------------------T-C---C---T----C--A--G--A--T-----C--C---C------G---G--G---A---G----G-A---------------------------------C--C-A----C-----C----------------------------------A--G---------T------------------------------------G--G--C-----G--------------------------------------------A---------------------------------------------------A---------------------------------------------A----------------------------------------------------G--C-----------G---T-C-C--G-----G-C----T---A------------------G--A--A--C---G--C--G--C--C--C-------G--A--C------G-G----T-----G--A--G---------------------G--G--G--C----G----A---A-----A---G---C---C---G--G-G----G----T-------------------------------------A--G--C----A---------------------------------------------------------------------A---------------------------------------------------------------------------------------------A----T---A--G-----G----A------------------------------T--T--A--G-------------------------------------------A---------------------------------------------------------------------------------------------------------------T----------------------------------------------------------------------------------------------------A--------------------------------C-----------------------------------------------------------------------------------------------------------------------------------C---C--T--A--G--T----A----------------------------------------------------------------------------------G-T----------------------------------C---C---C--G--G---C--------T-------G---T----A---A------------------------A--------C---------G--A----T------G-C---A------G------G--C----------T------------------------A-----G---G---T---G-------T----C----G---C-----G---T---A-----G----G--C------T--T---T--G--G-----------------G--C---C---T-----A--C--G--C---G----G---T-----G----C-C----------G----------C------A--G--G--A---------A--A----------------------------------A-C--T---G---G--T----A--A---------G----C--C--C----G---C-----C-----------G-----C----C----T---G--G---G----G------A---G--T-----A----C--G-G--C---C-----G---C--A---A---------------------------------------G--G---C--T---G----A--A--A-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C--T---T----A--A----A----G---G---A---------A----T---T---G---G---C--G----G---G---G--G--A--G--C--A-------C----C--A--C------A--------------A----G--G-G--G--T---G---G-A---A---C--C--T--G----C--G-G--C--------T------------C-----A------A---T--T--G--G----A------G---T---C-----A-A--C----G--------------------------------------C--C---T---G--G-------A------A----------------------------------------T------------C--T------------------------------------------------------------------C-----A----C-C---G--G----G--G--G-----A-----------G-----A--C--C-G-C------AG---G---------------A------T--G---A---C----G--G---C------C---A--G-G-----C-----T--A--------A-----C----G-------A-----------C--C--T--T--G----C--C-----AG--A---C-T-C--------G-C---G-G-------A----G-----A-----G---G-------A--G-G-T-G----C----A-T-G-G-C--C---G-T--C--G---C------------------------------------C---------------------------------------------------------------------------------------------------------------------------------------------A-G--C---T-C-G---T-----G--T--T------G-T----------G----------------------------------------------------A--------------------------------------------A--A--T--G-----T--C-C-G-G---T----T------A---------------------------------------------A------------------------------------------------G----T----------C-C---G--G-C---A-----A-C-G--A--G---C---G--A-------G----A------C-C--C--C--C------------A-C-T--T--C-T--A--G------T----T--------G-G-T---AA--T-T--------G------T--C-T-CT--------C---------Tg----------------GAGA----C----------------------------G-G----------------T-C--C------A-C-A----------------C---T---A--G--A--A--G--G------------------------------------------A---C---T-G---C----C--G-G-T-Gt-----TAA--------------------A-C--C-G---G--A--G-G---A-A-G-G-A---------------------------------------------G--G--G--G--G--C--C-A------------------------------------------C-G-G--C---A----G---G-T--C-A-G-C-A-------------------------------------------------------------------------------------T---G-C-C--------C-C---G-----A-A--A--------C-T-T--C--C--G-G-G---C-C--------G--C---A---C---G-C--G-G-G--T---T-A-C-A-A--T--G-G-C-A--G--G-G----A-C--A--G-C-G-G-G----A---------TCT---G-----A--C--C-C--C-----G--A-A--A----G-G-G---G---A---A---------------G-G--C-A-A--T--C--CC-Ac--AAA---C-C--C---T---G---C-C------T---C-A---G--T--T-G--G-G-----A--T--C----G---A--G--G-G---C-----T-G-----A-----A--A--C-T--C-------G--C-C-C--T---C-G-T--GA-A---C-G-A--G---G-A--A--T--C--C-C--T-----A---G----T--A----A-C--C--G--C--G--G--G--------T-C-------A-------------------------A----C-A-A------------------------------------C--C--C--G--C-----G--G--T-----G-----A--A--T--A-C------G--T--C--C---C----T-----G---C--T---C------C--T--------T--G--C---A--C-A--C----A-C-----------C---G-C---------C---C-G--------T-C---------G-----C---T--C--C---A-C-C-C--G-A---G-T-G--G-AGg---GGA-A-G--T--G--A-G-G-C-C----T-C-T-TGCCcttcgg-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GGT-G-G---G-A-G-G--T--C-G-A---G--C--T--T----C--Tc-----C---T----C-C--G--C--G-A-------G--G---G----------G-----G-G--AG--A-----A-------G--T------------C-G-------T-A-----A--C--A---A---G---G---T--A--G-C--C-G-----T-AG-G-----G-------G--AA-------------C----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

期望输出:

在序列中用关键字标识的文件列表,然后打印而不是“描述”字段,但代码已经这样做了。当我的电脑只有16GB的内存时,我如何使这段代码可行?在


Tags: 文件代码renames关键字openaacc
3条回答

对于77GB的文件,可能需要提前做一些准备,以避免在字符串中重复搜索。我认为这会给你同样的答案,但可能会更有效,因为它使用集合来确定令牌的存在,而不是在字符串中搜索。还请注意,您的原始算法假设大小写匹配-通过强制集的内容为小写并强制测试的标记也为小写,从而使比较不区分大小写是很简单的。python3也是冻结集。在

我想你的意思是,如果属和种中的一个都存在,就应该打印一行:

listofspecies = open("bacreduced.txt").readlines()
species_1 = []
species_2 = []
for line in listofspecies:
    species = line.strip().split('_')
    species_1.append(species[0])
    species_2.append(species[1])

species_1 = frozenset(species_1)
species_2 = frozenset(species_2)

with open("Bac16s.faa") as f:
    for line in f:
        if not line[0] == '>':
            continue
        line_tokens = line[1:].strip().split('_')
        if (line_tokens[0] in species_1) and (line_tokens[1] in species_2):
            print(line_tokens[0] + '_' + line_tokens[1])

但是,如果你想打印一条线,如果只存在属和种的精确组合,那么实际上要容易得多:

^{pr2}$

在关于this question的讨论之后,我决定删除我先前的回答,因为有更好的方法可以做到这一点。问题与我之前指出的相同:您使用的是readlines,这意味着当您希望一次解析一行时,您必须将整个文件读入内存,但是我建议使用一个简单的for循环的解决方案变得很难处理,因为需要在搜索的行之后访问该行,相反,您需要使用生成器在文件中迭代当前行和下一行的知识:

def pairwiseLowMemory(iterable) :
    current = next(iterable, None)
    if not current :
        return
    while (True) :
        last = current
        current = next(iterable, None)
        if not current :
            break
        yield (last, current)

然后使用成对循环,使当前行和下一行在循环中都有效:

^{pr2}$

这种方法允许您在了解下一行的同时,干净而优雅地处理一行,pairwise实现可以高效地完成这项工作,而不需要不合理的内存需求。在

您可以一次在一行中加载文件,而不是将文件作为一个整体加载到内存中。Python在文件上提供了一个方便的迭代器,它确实做到了:

import re

listofspecies = open("bacreduced.txt").readlines()
do_print = False
with open("Bac16s.faa") as f:
    for line in f:
        if do_print:
            print (do_print + line.strip())
            do_print = False
            continue
        for x in listofspecies:    
            names = x.split("_")
            if re.findall(names[0].strip(), line):
                if re.findall(names[1].strip(), line):
                    do_print = ">" + x
                    break

相关问题 更多 >