如何在 Python 中的某个字符处将字符串分成相等的块?

How to split a string in equal chunks at certain character in Python?

所以有一串用\n分隔的值。 例如: “link1\nlink2\nlink3\nlink4\n” 我正在尝试用电报 API 发送消息,但它的长度限制为 4050 个字符。如何将字符串分成 4050 个字符或更少的 \n 字符块,这样它就不会弄乱任何链接? 所以我希望最终结果是一个包含 4050 个字符或更少字符的字符串列表,并且原始列表拆分点应该在 "\n" 字符处。

您可以使用 .split() 和列表理解:

a = "link1\nlink2\nlink3\nlink4\n"
b = a.split('\n')
[i for i in b if len(i)<4050 and i]

输出:

['link1', 'link2', 'link3', 'link4']

您可以使用 textwrap.wrap:

import textwrap
textwrap.wrap(s, width=4050)

示例:

s = "link1\nlink2\nlink3\nlink4\n"*1000

# get chunks
chunks = textwrap.wrap(s, width=4050)

# get size
list(map(len, chunks))
#[4049, 4049, 4049, 4049, 4049, 3749]

替代 \n 完全中断:

def split(s, max_len=4050):
    out = []
    start = 0
    last_n = None
    for i, c in enumerate(s):
        if c == '\n':
            last_n = i
        if i-start>max_len or i+1 == len(s):
            out.append(s[start:last_n+1])
            start = last_n+1
    return out