4

所以我有一个包含以下内容的文件:

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
4

2 回答 2

14

好的,我想我理解你的问题——你想遍历文件中的行,对吧?但只有序列中的第二行——带有蛋白质序列的那一行——很重要,对吗?这是我的建议:

# 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_###

于 2012-04-15T04:42:41.343 回答
1

使用readlines并将其全部投入for循环。

with open(filename, 'r') as fh:
    for line in fh.readlines:
        # do processing here

在该#do processing here部分中,您可以只准备另一个行列表以写入另一个文件。(使用with手柄所有正确的关闭和确定。)

于 2012-04-15T04:37:11.557 回答