如何将字符串分割成大小相等的部分?

我有一个包含核苷酸序列的字符串。该字符串的长度为 1191 个核苷酸。


如何以每行只有 100 个核苷酸的格式打印序列?现在我已经对其进行了硬编码,但我希望它适用于任何核苷酸串。这是我现在的代码


def printinfasta(SeqName, Sequence, SeqDescription):

    print(SeqName + " " + SeqDescription)

    #how do I make sure to only have 100 nucleotides per line?

    print(Sequence[0:100])

    print(Sequence[100:200])

    print(Sequence[200:300])

    print(Sequence[400:500])

    print(Sequence[500:600])

    print(Sequence[600:700])

    print(Sequence[700:800])

    print(Sequence[800:900])

    print(Sequence[900:1000])

    print(Sequence[1000:1100])

    print(Sequence[1100:1191])

printinfasta(SeqName, Sequence, SeqDescription)

Sequence = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"


SMILET
浏览 172回答 6
6回答

jeck猫

您可以使用textwrap.wrap将长字符串拆分为字符串列表import textwrapseq = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"print('\n'.join(textwrap.wrap(seq, width=100)))

慕雪6442864

您可以使用基于的辅助函数itertools.zip_longest。辅助函数被设计为(也)处理序列不是相等部分大小的精确倍数的情况(最后一组的元素比之前的组少)。from itertools import zip_longestdef 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 DescriptionNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT

海绵宝宝撒

我假设您的序列采用 FASTA 格式。如果是这种情况,您可以使用提供 FASTA 序列包装实用程序的许多生物信息学软件包中的任何一个。例如,您可以使用FASTX-Toolkit. 使用命令行实用程序包装 FASTA 序列FASTA Formatter,例如每行最多 100 个核苷酸:fasta_formatter -i INFILE -o OUTFILE -w 100您可以FASTX-Toolkit使用安装包conda,例如:conda install fastx_toolkit或conda create -n fastx_toolkit fastx_toolkit请注意,如果您最终从头开始编写(简单)代码来包装 FASTA 序列,请记住不应包装标题行(以 开头的行>) 。仅包裹序列行。

aluckdog

你可以使用itertools.zip_longest一些iter魔法来将其写成一行:from itertools import zip_longestsequence = "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)))

哔哔one

一个可能的解决方案是使用re模块。import redef splitstring(strg, leng):    chunks = re.findall('.{1,%d}' % leng, strg)    for i in chunks:        print(i)splitstring(strg = seq, leng = 100))

鸿蒙传说

包cytoolz(可使用安装)提供了一个可以在此处使用的pip install cytoolz函数:partition_all#!/usr/bin/env python3from cytoolz import partition_alldef 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 个字母的元组,每个字母取自seq,最后一个较短的字母是字母数不是 100 的倍数。用于map("".join, ...)将每个此类元组中的字母分组为单个字符串。前面*的map使其结果被视为 的单独参数print。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python