社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

将长文本拆分为两个或多个部分,每个部分在python中具有最大长度

botti23 • 3 年前 • 1244 次点击  

让我们假设我有一个长文本,我想用一个API处理它,该API具有允许的最大字符数(N)。我想根据分隔符将该文本拆分为两个或多个短于N个字符的文本。我知道我可以用分隔符分割,但我希望输出子文本的数量尽可能少。

例如,假设我的文本是:

“我的知识是,我的知识是,我的知识是,我的知识是,我的知识是,我的知识是,我的知识是,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的知识是正确的,我的,我的知识是正确的。”。

这是一种暂时性的综合质量,是一种方式错误,是一种选择,是一种有效的治疗方法,是一种永久性的治疗方法,是一种矫正方法。我是diceret ceteros。经验告诉我们,这是一个非常重要的问题。"

550个字符长。假设N是250。我希望文本可以这样分割:

  • 第1部分:“Lorem ipsum Door sit amet,odio Saltandi id nam,ferri nostro te duo.Eum ex odio habeo qualisque,ne eos natum graeco.Autem voluptatum ex mea.Nullet Putten reformidans cu pro,posse recusabo reprehendunt pro no.An sit ludus Louds斜”(237个字符)

  • 第2部分:“科蒂岛海上领事馆,南诺二号船厂。

这是一种暂时性的综合质量,是一种方式错误,是一种选择,是一种有效的治疗方法,是一种永久性的治疗方法,是一种矫正方法。我是diceret ceteros。“(232个字符)

  • 第三部分:剩余部分。

你知道如何在Python中实现这一点吗?

谢谢你的帮助。 弗朗西丝卡

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127920
 
1244 次点击  
文章 [ 5 ]  |  最新文章 3 年前
LoneWanderer
Reply   •   1 楼
LoneWanderer    3 年前

您可以考虑构建一个 built-in TextWrapper 工具。 基类允许您指定处理文本的规则:最大列数(宽度)、最大行数、连字符处理等。

textwrap模块提供了一些方便的功能,以及 TextWrapper,完成所有工作的类 .如果您只是包装或填充一个或两个文本字符串,那么便利功能应该足够好; 否则,为了提高效率,应该使用TextWrapper的实例。 [强调我的]

基本类本身并没有处理OP问题的细节,但对于任何登陆本页面的人来说,都值得一看。

本节中的内容也可能会给你一些启发: https://docs.python.org/3/library/text.html#stringservices

Riccardo Bucco
Reply   •   2 楼
Riccardo Bucco    3 年前

这是一个可能的解决方案:

def split_txt(txt, sep, n):
    if any(len(s) + 1 > n for s in txt.split(sep)):
        raise Exception('The text cannot be split')
    result = []
    start = 0
    while start + n <= len(txt):
        result.append(txt[start:start + n].rsplit(sep, 1)[0] + sep)
        start += len(result[-1])
    if start < len(txt):
        result.append(txt[start:])
    return result
        
Ahmad Anis
Reply   •   3 楼
Ahmad Anis    3 年前

您可以创建一个函数,该函数可以返回所需长度的块。

In [13]: def split(N, text):
    ...:     chunks = [text[i:i+N] for i in range(0, len(text), N-1)]
    ...:     return chunks

这将以列表的形式返回块。即

text = "Lorem.................." # complete lorem ispm
chunks = split(250, text)
print(len(s[0]), len(s[1]), len(s[2]))

输出长度为

250 250 50
Henrik
Reply   •   4 楼
Henrik    3 年前

n = 250
text = """Lorem ipsum dolor sit amet, odio salutandi id nam, ferri nostro te duo. Eum ex odio habeo qualisque, ne eos natum graeco. Autem voluptatum ex mea. Nulla putent reformidans cu pro, posse recusabo reprehendunt pro no. An sit ludus oblique. Consulatu cotidieque ex sea, nam no duis prompta expetendis.

Est ne tempor quaestio complectitur, modo error vim et. Option voluptaria efficiantur te eam, ea appareat evertitur qui, te vix pertinax recteque. Mea eu diceret ceteros. Expetenda torquatos assueverit est ex, te reque voluptatibus signiferumque has."""

if len(text) >= 550:
  print(text[0:n-1])
  print(text[n:])
else:
  print(text)

所以你可以有一个变量 n 长度(在您的示例中为250)。然后检查文本的长度是否大于或等于550个字符。如果是,它将打印从char开始的所有内容 0

Cubix48
Reply   •   5 楼
Cubix48    3 年前

您可以使用正则表达式:

import re


ouput = re.findall(r".{1,250}(?:\.|$)", data)
print(ouput)

  • .{1,250} :匹配1到250次之间的任意字符,尽可能多地匹配。
  • \. :匹配一个点。
  • | :或
  • $ :匹配字符串的结尾。

还可以在变量中输入分隔符和最大长度。

import re


num_max = 250
delimiter = re.escape('.')

ouput = re.findall(fr".{{1,{num_max}}}(?:{delimiter}|$)", data)
print(ouput)

输出:

[
    'Lorem ipsum dolor sit amet, odio salutandi id nam, ferri nostro te duo. Eum ex odio habeo qualisque, ne eos natum graeco. Autem voluptatum ex mea. Nulla putent reformidans cu pro, posse recusabo reprehendunt pro no. An sit ludus oblique.',
    ' Consulatu cotidieque ex sea, nam no duis prompta expetendis.',
    'Est ne tempor quaestio complectitur, modo error vim et. Option voluptaria efficiantur te eam, ea appareat evertitur qui, te vix pertinax recteque. Mea eu diceret ceteros. Expetenda torquatos assueverit est ex, te reque voluptatibus signiferumque has.'
]