6 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用textwrap.wrap將長(zhǎng)字符串拆分為字符串列表
import textwrap
seq = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"
print('\n'.join(textwrap.wrap(seq, width=100)))

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用基于的輔助函數(shù)itertools.zip_longest
。輔助函數(shù)被設(shè)計(jì)為(也)處理序列不是相等部分大小的精確倍數(shù)的情況(最后一組的元素比之前的組少)。
from itertools import zip_longest
def grouper(n, iterable):
? ? """ s -> (s0,s1,...sn-1), (sn,sn+1,...s2n-1), (s2n,s2n+1,...s3n-1), ... """
? ? FILLER = object()? # Value that couldn't be in data.
? ? for result in zip_longest(*[iter(iterable)]*n, fillvalue=FILLER):
? ? ? ? yield ''.join(v for v in result if v is not FILLER)
def printinfasta(SeqName, Sequence, SeqDescription):
? ? print(SeqName + " " + SeqDescription)
? ? for group in grouper(100, Sequence):
? ? ? ? print(group)
Sequence = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"
printinfasta('Name', Sequence, 'Description')
示例輸出:
Name Description
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
CCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTA
AATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCC
TAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTT
TGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACAT
TTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
我假設(shè)您的序列采用 FASTA 格式。如果是這種情況,您可以使用提供 FASTA 序列包裝實(shí)用程序的許多生物信息學(xué)軟件包中的任何一個(gè)。例如,您可以使用FASTX-Toolkit
.?使用命令行實(shí)用程序包裝 FASTA 序列FASTA Formatter
,例如每行最多 100 個(gè)核苷酸:
fasta_formatter?-i?INFILE?-o?OUTFILE?-w?100
您可以FASTX-Toolkit
使用安裝包conda
,例如:conda install fastx_toolkit
或conda create -n fastx_toolkit fastx_toolkit
請(qǐng)注意,如果您最終從頭開(kāi)始編寫(xiě)(簡(jiǎn)單)代碼來(lái)包裝 FASTA 序列,請(qǐng)記住不應(yīng)包裝標(biāo)題行(以 開(kāi)頭的行>
) 。僅包裹序列行。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
你可以使用itertools.zip_longest一些iter魔法來(lái)將其寫(xiě)成一行:
from itertools import zip_longest
sequence = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"
output = [''.join(filter(None, s)) for s in zip_longest(*([iter(sequence)]*100))]
或者:
for s in zip_longest(*([iter(sequence)]*100)):
print(''.join(filter(None, s)))

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
一個(gè)可能的解決方案是使用re模塊。
import re
def splitstring(strg, leng):
chunks = re.findall('.{1,%d}' % leng, strg)
for i in chunks:
print(i)
splitstring(strg = seq, leng = 100))

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
包cytoolz
(可使用安裝)提供了一個(gè)可以在此處使用的pip install cytoolz
函數(shù):partition_all
#!/usr/bin/env python3
from cytoolz import partition_all
def printinfasta(name, seq, descr):
? ? header = f">{name} {descr}"
? ? print(header)
? ? print(*map("".join, partition_all(100, seq)), sep="\n")
printinfasta("test", 468 * "ACGTGA", "this is a test")
partition_all(100, seq))生成 100 個(gè)字母的元組,每個(gè)字母取自seq,最后一個(gè)較短的字母是字母數(shù)不是 100 的倍數(shù)。
用于map("".join, ...)將每個(gè)此類(lèi)元組中的字母分組為單個(gè)字符串。
前面*的map使其結(jié)果被視為 的單獨(dú)參數(shù)print。
添加回答
舉報(bào)