Python 在 2000 个字符后拆分字符串
Python Split string after 2000 characters
我正在开发一个可以 return 维基百科文章摘要的 discord 机器人。但有一个问题,有些摘要超过 2000 个字符,超出了 discord 的字符数限制。有什么方法可以将我的字符串拆分成多条消息?
我要拆分的字符串是str(wikipedia.search(query))
(整个都在嵌入块中):
embedVar = discord.Embed(title=str(query)
description=str(wikipedia.search(query)), color=0x9CAFBE)
await message.channel.send(embed=embedVar)
这是一个解决方案:
article = "5j5rtOf8jMePXn7a350fOBKVHoAJ4A2sKqUERWxyc32..." # 4000 character string i used
chunklength = 2000
chunks = [article[i:i+chunklength ] for i in range(0, len(article), chunklength )]
print(len(chunks))
输出
2
关于如何使用它的扩展:
for chunk in chunks:
embedVar = discord.Embed(title="article name",
description=chunk ,
color=0x9CAFBE)
await ctx.send(embed=embedVar)
要扩展 Darina 评论的内容,请在 post discord 上拼接之前的字符串。
posted_string = str(wikipedia.search(query))[:2000]
embedVar = discord.Embed(title=str(query),
description=posted_string,
color=0x9CAFBE) await message.channel.send(embed=embedVar)
一个'string'是一个字符数组。当您使用 [:2000] 将它分配给另一个变量时,您是在告诉解释器将所有字符从数组的开头开始,但不包括第 2000 个字符。
编辑:
正如 Ironkey 在评论中提到的那样,硬编码值是不可行的,因为我们不知道一篇文章有多少个字符。请试试这个未经测试的代码:
wiki_string = str(wikipedia.search(query))
string_length = len(wiki_string)
if string_len < 2000:
embedVar = discord.Embed(title=str(query),
description=wiki_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
else:
max_index = 2000
index = 0
while index < (string_length - max_index):
posted_string = wiki_string[index:max_index]
embedVar = discord.Embed(title=str(query),
description=posted_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
index = index + max_index
posted_string = wiki_string[index-max_index:]
embedVar = discord.Embed(title=str(query),
description=wiki_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
如果这不起作用,请告诉我失败的地方。谢谢!
我正在开发一个可以 return 维基百科文章摘要的 discord 机器人。但有一个问题,有些摘要超过 2000 个字符,超出了 discord 的字符数限制。有什么方法可以将我的字符串拆分成多条消息?
我要拆分的字符串是str(wikipedia.search(query))
(整个都在嵌入块中):
embedVar = discord.Embed(title=str(query)
description=str(wikipedia.search(query)), color=0x9CAFBE)
await message.channel.send(embed=embedVar)
这是一个解决方案:
article = "5j5rtOf8jMePXn7a350fOBKVHoAJ4A2sKqUERWxyc32..." # 4000 character string i used
chunklength = 2000
chunks = [article[i:i+chunklength ] for i in range(0, len(article), chunklength )]
print(len(chunks))
输出
2
关于如何使用它的扩展:
for chunk in chunks:
embedVar = discord.Embed(title="article name",
description=chunk ,
color=0x9CAFBE)
await ctx.send(embed=embedVar)
要扩展 Darina 评论的内容,请在 post discord 上拼接之前的字符串。
posted_string = str(wikipedia.search(query))[:2000]
embedVar = discord.Embed(title=str(query),
description=posted_string,
color=0x9CAFBE) await message.channel.send(embed=embedVar)
一个'string'是一个字符数组。当您使用 [:2000] 将它分配给另一个变量时,您是在告诉解释器将所有字符从数组的开头开始,但不包括第 2000 个字符。
编辑: 正如 Ironkey 在评论中提到的那样,硬编码值是不可行的,因为我们不知道一篇文章有多少个字符。请试试这个未经测试的代码:
wiki_string = str(wikipedia.search(query))
string_length = len(wiki_string)
if string_len < 2000:
embedVar = discord.Embed(title=str(query),
description=wiki_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
else:
max_index = 2000
index = 0
while index < (string_length - max_index):
posted_string = wiki_string[index:max_index]
embedVar = discord.Embed(title=str(query),
description=posted_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
index = index + max_index
posted_string = wiki_string[index-max_index:]
embedVar = discord.Embed(title=str(query),
description=wiki_string,
color=0x9CAFBE)
await message.channel.send(embed=embedVar)
如果这不起作用,请告诉我失败的地方。谢谢!