1

我正在尝试运行脚本(见下文)以读取 fasta 文件并输出分类文件(仅打印不带“>”字符的序列标题)但我不断收到无法解决的语法错误. 结果,该脚本创建了 cleanseqs.tax 文件,但该文件为空白。有人可以帮忙吗?

谢谢!

>>> Fasta = open("testseqs.fasta", "r")
>>> Tax = open("cleanseqs.tax", "w")
>>> while 1:
...     SequenceHeader= Fasta.readline()
...     Sequence= Fasta.readline()
...     if SequenceHeader == '':
...             break
...     Tax.write(SequenceHeader.replace('>', ''))
... Fasta.close()
  File "<stdin>", line 7
    Fasta.close()
        ^
SyntaxError: invalid syntax
>>> Tax.close()
4

5 回答 5

1

添加一个额外的行,因为... Fasta.close()不一定是 while 循环的结尾。它可以包含另一个关键字,例如else. 添加另一行意味着 while 循环的结束。

或者你的意思是缩进Fasta.close()

于 2013-05-31T09:15:55.200 回答
1

解释器认为您试图将Fasta.close()调用放在while-loop 中,但该行的缩进不正确。当您想结束该while块时,只需按 Enter。

此外,在这里使用with- 语句也是理想的,这样您就可以完全摆脱 - 调用close()

于 2013-05-31T09:18:35.457 回答
0

文件对象上下文管理器,因此您可以使用with 语句自动关闭文件:

with open("testseqs.fasta", "r") as fasta, open("cleanseqs.tax", "w") as tax:
    while True:
        ...
于 2013-05-31T09:21:48.873 回答
0

根据您的要求,以下是现有 FASTA 解析器的几个示例:

示例文件:

$ cat test.fasta 
>header1 description1
SEQUENCE
>header2 description2
SEQUENCESEQUENCE
  1. BioPython.SeqIO

    from Bio import SeqIO
    reader = SeqIO.parse('test.fasta', 'fasta')
    with open('biopython.tax', 'w') as out:
        for prot in reader:
            out.write(prot.description + '\n')
    reader.close()
    

    输出:

    $ cat biopython.tax 
    header1 description1
    header2 description2
    
  2. 使用pyteomics.fastapyteomics是我和我的同事开发的库):

    from pyteomics import fasta
    with open('pyteomics.tax', 'w') as out, fasta.read('test.fasta') as reader:
        for prot in reader:
            out.write(prot.description + '\n')
    

    输出:

    $ cat pyteomics.tax 
    header1 description1
    header2 description2
    
于 2013-05-31T10:09:43.613 回答
0

我有同样的问题,我的程序会写入一个文件,但文件结果是空的。

更正您的缩进然后关闭文件,在python中关闭文件后内容将出现在文件中。

于 2013-05-31T10:11:18.137 回答