在 Biopython 中:你能‘打印’这样一个长输出将被格式化为多行,每行都有一个最大字符长度,就像在 FASTA 格式中经常看到的那样吗?

In Biopython: Can you ‘print’ so a long output will be formatted as multiple lines each with a max char length, as often seen in the FASTA format?

我一直在尝试从 genbank 文件中获取信息,并使用我修改过的 xbello 的以下代码打印出轨迹标记和翻译。

from Bio import SeqIO

for rec in SeqIO.parse("file.gb", "genbank"):
    if rec.features:
       for feature in rec.features:
           if feature.type == "CDS" and feature.qualifiers.has_key('translation'):
               print '>'+feature.qualifiers['locus_tag'][0]
               print feature.qualifiers['translation'][0]

这是可行的,但是它会将每个翻译序列打印为很长的行(我假设最大字符长度 python 允许), 我想知道是否可以将其设置为每行约 60 个字符的多行段落格式,这就是您在 .faa 文件中经常看到的格式。

我试过print(textwrap.fill(feature.qualifiers['translation'], width=60))print(textwrap.wrap(feature.qualifiers['translation'], width=60))

到目前为止还没有奏效,我试过了 X = feature.qualifiers['translation'] 并做 print(textwrap.fill(X, width=60))

但毫不奇怪,计算机不知道我要它做什么…… 我不确定还有哪些其他格式命令可用于打印而不是 Xout.write,我有一种强烈的感觉,我没有以一种让计算机知道我希望它等待来自 [=16= 的文本的方式编写它] 然后用 width=60

换行

我使用cmd或powershell将运行此代码作为脚本,用“>X.xx”给出输出文件名和文件类型。

您可以编写一个自定义打印函数,该函数获取一个字符串作为输入并将该字符串拆分为 60 个字符的部分,然后打印这些部分。

def custom_print(string):
    counter=0
    res=""
    for char in string:
        if counter==60:
            print res
            counter=0
            res=""
            continue
        res+=char
        counter+=1

如果序列的长度小于 60,Sebastian 的解决方案将不起作用。它将不打印任何内容。

我正在添加另一个解决方案:

def fasta_pretty_print(seq):
    k = 60
    sixty_bp = [seq[i:i+k] for i in range(0, len(seq), k)]
    print('\n'.join(sixty_bp))