[英]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.