python - 为什么它会以它的方式工作(rstrip)
问题描述
我有一个可以正常工作的代码,但我不明白。为什么之后buf[1:]
只打印出Rosalind_4402
没有DNA。法斯塔=
>Rosalind_4402
GCAGCTAGCTAGCTAGCTGGGATTCGGATCGGCGCCCCGAGAGGATTCTTTCAGCTGTAA
GAATTTATCCTCGATCGGGCTATAAAACCTACGCATATCTGCTAGCTGAGGGGCTATCTT
with open("rosalind_gc.txt") as FASTA:
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 文件中的行尾字符或总行数。
旧版本的 fastafile 是不规则的,因此有时会有多个 '\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']
推荐阅读
- jquery - 仅在首页 Wodpress 查询中排除类别
- vb.net - 将 LINQ 表达式结果返回到命名/强类型变量
- r - 为什么我不能在 ggplot 中的点和错误栏之间划一条线?
- c++ - 两条日志线在c++中与log4Cxx混合
- java - 类和对象之间的编码差异
- python - 在 BeautifulSoup (Python) 中找不到亚马逊重定向的 url。从哪里获得重定向网址的任何想法?
- html - Xslt在不同语言的不同规则的字符串之间获取文本
- c# - 如何在 Windows 窗体 C# 中一次将两个文件发布到 API
- javascript - XSS 黑名单/白名单
- grafana - 无法在 Grafana 4.5.2 中管道模板变量