Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主字符串python/biopython中的现有子字符串没有输出_Python_Performance_Output_Biopython - Fatal编程技术网

主字符串python/biopython中的现有子字符串没有输出

主字符串python/biopython中的现有子字符串没有输出,python,performance,output,biopython,Python,Performance,Output,Biopython,如果主字符串的特定部分存在子字符串,我将生成一个代码来打印字符串。我有一个如下的文件,我从seq11\u rv创建了5个字母表子字符串(5个字符) >seq11_fw TCAGATGTGTATAAGAGACAGTTATTAGCCGGTTCCAGGTATGCAGTATGAGAA >seq11_rv GAGATTATGTGGGAAAGTTCATGGAATCGAGCGGAGATGTGTATAAGAGACAGTGCCGCGCTTCACTAGAAGTCATACTGC 然后,我对这5个字符进行

如果主字符串的特定部分存在子字符串,我将生成一个代码来打印字符串。我有一个如下的文件,我从
seq11\u rv
创建了5个字母表子字符串(5个字符)

>seq11_fw
TCAGATGTGTATAAGAGACAGTTATTAGCCGGTTCCAGGTATGCAGTATGAGAA
>seq11_rv
GAGATTATGTGGGAAAGTTCATGGAATCGAGCGGAGATGTGTATAAGAGACAGTGCCGCGCTTCACTAGAAGTCATACTGC
然后,我对这5个字符进行反向补码,并将它们附加到一个列表中。然后我查看了
seq11_-fw
,如果位置
[42:51]
(seq11_-fw中的GCAGTATGA)有任何列表项,则应打印确认

为了便于理解,
seq11_rv
的最后5个字符是
ACTGC
,它的反向补码变成了
GCAGT
,如果你检查
seq11_fw[42:51]
这个
GCAGT
在那个位置内,但我没有得到任何输出

任何帮助都将不胜感激

这是我的密码:

from Bio import SeqIO
from Bio.Seq import Seq

with open(file, 'r') as f:
    lst = []
    for record in SeqIO.parse(f, 'fasta'):
        if len(record.seq) == 81:
            for i in range(len(record.seq)):
                kmer = str(record.seq[i:i + 5])
                if len(kmer) == 5:
                    C_kmer = Seq(kmer).complement()
                    lst.append(C_kmer[::-1])


        cnt=0
        if len(record.seq) == 54 and any(str(items) in str(record.seq[42:51]) for items in lst):
            cnt +=1

        if cnt == 1:
            print(record.id)
            print(record.seq)

    print(lst)

这一个似乎有效,问题在于您设置算法的方式:

from Bio import SeqIO
from Bio.Seq import Seq

file ='test.faa'

with open(file, 'r') as f:
    lst = []
    for record in SeqIO.parse(f, 'fasta'):
        if len(record.seq) == 81:
            for i in range(len(record.seq)):
                kmer = str(record.seq[i:i + 5])
                if len(kmer) == 5:
                    C_kmer = Seq(kmer).complement()
                    lst.append(C_kmer[::-1])

with open(file, 'r') as f:    
    cnt=0
    for record in SeqIO.parse(f, 'fasta'):
        if len(record.seq) == 54 and any(str(items) in str(record.seq[41:52]) for items in lst):
            cnt +=1

        if cnt == 1:
            print(record.id)
            print(record.seq)
            cnt = 0
在此版本中,您将在输入文件上迭代两次:

第一次创建5人列表

第二个是检查列表中长度为54的record.seq的[41:52]

您需要将计数器cnt重置为零,否则将打印所有序列

如果您计划让测试文件包含多个序列,我会尝试让一个输入文件包含正向序列,一个输入文件包含反向序列,顺序相同。然后我会检查两个文件上并行循环的每一对。我不知道怎么做,但这里有很多很好的例子:

我认为您需要使用SeqIO.parse将这两条记录读入两个列表,然后像这样处理它们:

from Bio import SeqIO
from Bio.Seq import Seq

file1 ='test_fw.faa'
file2 ='test_rv.faa'

record1_lst = []
record2_lst = []

with open(file1, 'r') as f1:
    for record in SeqIO.parse(f1, 'fasta'):
        record1_lst.append(record)
with open(file2, 'r') as f2:   
    for record in SeqIO.parse(f2, 'fasta'):
        record2_lst.append(record)
    

for record_fw, record_rv in zip(record1_lst, record2_lst):
    print(record_fw.id, record_rv.id)
或者像这样工作,记住在解析器迭代器清空后关闭文件:

from Bio import SeqIO
from Bio.Seq import Seq

file1 ='test_fw.faa'
file2 ='test_rv.faa'



f1 = open(file1, 'r')
f2 = open(file2, 'r')
    
record1 = SeqIO.parse(f1, 'fasta')
record2 = SeqIO.parse(f2, 'fasta')


for record_fw, record_rv in zip(record1, record2):
    print(record_fw.id, record_rv.id)
    
f1.close()
f2.close() 
印刷品(cnt)说了什么?印刷品(str中的任何str(项目)(记录序列[42:51])对于lst中的项目)说了什么?