繁体   English   中英

为什么这样工作(rstrip)

[英]Why does this work the way it does (rstrip)

我有一个可以正常工作的代码,但我不明白。 为什么 buf[1:] 之后只打印出 Rosalind_4402 而没有 DNA。 快速 =

>Rosalind_4402
GCAGCTAGCTAGCTAGCTGGGATTCGGATCGGCGCCCCGAGAGGATTCTTTCAGCTGTAA
GAATTTATCCTCGATCGGGCTATAAAACCTACGCATATCTGCTAGCTGAGGGGCTATCTT
    buf = FASTA.readline().rstrip()
    print(buf)
    while buf:
        seq_name, seq = buf[1:], ''
        print(seq_name)
        buf = FASTA.readline().rstrip()
        while not buf.startswith('>') and buf:
            seq = seq + buf
            buf = FASTA.readline().rstrip()
        print(seq)```

我的猜测是您尝试从文件中获取一个或多个 fasta 序列,无论是由 BLAST 序列的名称列表还是仅由所有序列给出。 使用以下脚本,您可以执行两种类型的操作。

文件中的最后一行可能是 fasta 序列、行尾字符或其他内容。 如果没有覆盖,缓冲区的输出将在中途停止。 因此,您可以筛选 fasta 文件中的行尾字符或总行数。

旧版本的 fastafiles 是不规则的,所以有时会有多个 '\\n' 换行符或根本没有。 两者都使用锁来处理。

享受。


def myseq(seq_file, seq_list=[]):
    # if sequence identifier list (seq_list) is zero then all sequences are returned; if a list is given the matched IDs return seq.
    buf = FASTA.readlines()
    
    lines = len(buf)
    count = 0
    
    lock = False
    identifier = ''
    string = ''
    result = []
    
    for item in buf:
        print(f'lock : {lock}, item {item}.')
                   
        if (item[0] == '>') and (lock == False):
            identifier = item.rstrip()
            
            # selection based on sequence name in list or empty list to get them all.
            if seq_list != []:
                for seq_name in seq_list:
                    if identifier == seq_name:
                        lock = True
            else:
                lock = True
        
        elif lock and (item[0] in ['A', 'C', 'G', 'T', 'U']):
            string += item.rstrip()
            
        count += 1 # count line positions in list.
        
        if lock and (item == '\n') or (count == lines):
            
            result.append((identifier, string))
            identifier = ''
            string = ''
            lock = False
                
    return result

with open('X:\Test\fasta.txt', encoding = 'utf-8') as FASTA:
#    print(FASTA.readlines())
    buf = myseq(FASTA)
    print(buf)

print(FASTA.readlines())输出:

['\n', '>Rosalind_4402\n', 'GCAGCTAGCTAGCTAGCTGGGATTCGGATCGGCGCCCCGAGAGGATTCTTTCAGCTGTAA\n', 'GAATTTATCCTCGATCGGGCTATAAAACCTACGCATATCTGCTAGCTGAGGGGCTATCTT\n', '\n', '>Rosalind_4403\n', 'GCAGCTAGCTAGCTAGCTGGGATTCGGATCGGCGCCCCGAGAGGATTCTTTCAGCTGTAA\n', 'GAATTTATCCTCGATCGGGCTATAAAACCTACGCATATCTGCTAGCTGAGGGGCTATCTT']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM