在 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))
我一直在尝试从 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))