所以我有一个包含这个文件的文件:
SequenceName 4.6e-38 810..924
SequenceName_FGS_810..924 VAWNCRQNVFWAPLFQGPYTPARYYYAPEEPKHYQEMKQCFSQTYHGMSFCDGCQIGMCH
SequenceName 1.6e-38 887..992
SequenceName_GYQ_887..992 PLFQGPYTPARYYYAPEEPKHYQEMKQCFSQTYHGMSFCDGCQIGMCH
我希望我的程序只读取包含这些蛋白质序列的行。到目前为止,我得到了这个,它跳过第一行并阅读第二行:
handle = open(filename, "r")
handle.readline()
linearr = handle.readline().split()
handle.close()
fnamealpha = fname + ".txt"
handle = open(fnamealpha, "w")
handle.write(">%s\n%s\n" % (linearr[0], linearr[1]))
handle.close()
但它只处理第一个序列,我需要它来处理包含序列的每一行,所以我需要一个循环,我该怎么办呢? 保存到txt文件的部分也非常重要,所以我需要找到一种可以将这两个目标结合起来的方法。 我输出的代码是:
>SequenceName_810..924
VAWNCRQNVFWAPLFQGPYTPARYYYAPEEPKHYQEMKQCFSQTYHGMSFCDGCQIGMCH
答案 0 :(得分:13)
好的,我想我理解你的问题 - 你想迭代文件中的行,对吧?但只有序列中的第二行 - 具有蛋白质序列的那一行 - 重要,对吗?这是我的建议:
# context manager `with` takes care of file closing, error handling
with open(filename, 'r') as handle:
for line in handle:
if line.startswith('SequenceName_'):
print line.split()
# Write to file, etc.
我的理由是你只对以SequenceName_###
开头的行感兴趣。
答案 1 :(得分:1)
使用readlines
并将其全部放入for
循环。
with open(filename, 'r') as fh:
for line in fh.readlines:
# do processing here
在#do processing here
部分,您可以准备另一行列表以写入另一个文件。 (使用with
处理所有正确的闭包并确定。)