为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2023-08-08 10:49:09
我有一个包含核苷酸序列的字符串。该字符串的长度为 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"
查看完整描述

6 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用textwrap.wrap将长字符串拆分为字符串列表


import textwrap


seq = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAACCCTAAATCCATAAATCCCTAAAACCATAATCCTAAATCCCTTAATTCCTAAATCCCTAATACTTAGACCCTAATCTTTAGTTCCTAGACCCTAATCTTTAGTTCCTAGACCCTAAATCCATAATCCTTAATTCCTAAATTCCTAAATCCCTAATACTAAATCTCTAAATCCCTAGCAATTTTCAAGTTTTGCTTGATTGTTGTAGGATGGTCCTTTCTCTTGTTTCTTCTCTGTGTTGTTGAGATTAGTTTGTTTAGGTTTGATAGCGTTGATTTTGGCCTGCGTTTGGTGACTCATATGGTTTGATTGGAGTTTGTTTCTGGGTTTTATGGTTTTGGTTGAAGCGACATTTTTTTGTGGAATATGGTTTTTGCAAAATATTTTGTTCCGGATGAGTAATATCTACGGTGCTGCTGTGAGAATTATGCTATTGTTTT"

print('\n'.join(textwrap.wrap(seq, width=100)))


查看完整回答
反对 回复 2023-08-08
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2023-08-08
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我假设您的序列采用 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 序列,请记住不应包装标题行(以 开头的行>) 。仅包裹序列行。

查看完整回答
反对 回复 2023-08-08
?
aluckdog

TA贡献1847条经验 获得超7个赞

你可以使用itertools.zip_longest一些iter魔法来将其写成一行:


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)))


查看完整回答
反对 回复 2023-08-08
?
哔哔one

TA贡献1854条经验 获得超8个赞

一个可能的解决方案是使用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))


查看完整回答
反对 回复 2023-08-08
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

cytoolz(可使用安装)提供了一个可以在此处使用的pip install cytoolz函数: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 个字母的元组,每个字母取自seq,最后一个较短的字母是字母数不是 100 的倍数。


用于map("".join, ...)将每个此类元组中的字母分组为单个字符串。


前面*的map使其结果被视为 的单独参数print。


查看完整回答
反对 回复 2023-08-08
  • 6 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信