如何在 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
所以有一串用\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