【问题标题】:Proper word wrapping of long text长文本的正确换行
【发布时间】:2013-10-18 19:28:40
【问题描述】:

我有一个 1000 个字符长的文本字符串,我想将此文本拆分为小于 100 个字符的块,而不拆分整个单词(99 个字符可以,但 100 个不可以)。包装/拆分只能在空格上进行:

例子:

text = "... this is a test , and so on..."
                              ^
                  #position: 100

应该拆分为:

newlist = ['... this is a test ,', ' and so on...', ...]

我想得到一个列表newlist 的文本被正确分割成可读(不是单词裁剪)块。你会怎么做呢?

【问题讨论】:

    标签: python


    【解决方案1】:

    使用textwrap 模块的wrap 函数。下面的示例将行拆分为 10 个字符宽:

    In [1]: import textwrap
    
    In [2]: textwrap.wrap("... this is a test , and so on...", 10)
    Out[2]: ['... this', 'is a test', ', and so', 'on...']
    

    【讨论】:

    • 非常感谢,我不知道有这样的模块。我只是坐在复杂的代码和平中:)
    • @Johnny 哈哈我去过那里别担心。
    【解决方案2】:

    您可以使用textwrap 模块:

    In [2]: import textwrap
    
    In [3]: textwrap.wrap("""Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
       ...: tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
       ...: quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
       ...: consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
       ...: cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
       ...: proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            """, 40)
    Out[3]: 
    ['Lorem ipsum dolor sit amet, consectetur',
     'adipisicing elit, sed do eiusmod tempor',
     'incididunt ut labore et dolore magna',
     'aliqua. Ut enim ad minim veniam, quis',
     'nostrud exercitation ullamco laboris',
     'nisi ut aliquip ex ea commodo consequat.',
     'Duis aute irure dolor in reprehenderit',
     'in voluptate velit esse cillum dolore eu',
     'fugiat nulla pariatur. Excepteur sint',
     'occaecat cupidatat non proident, sunt in',
     'culpa qui officia deserunt mollit anim',
     'id est laborum.']
    

    【讨论】:

      【解决方案3】:

      像其他人说的那样自动换行,但是对于另一种选择:

      def splitter(s, n):
          for start in range(0, len(s), n):
              yield s[start:start+n]
      
      data = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"
      for splitee in splitter(data, 10):
          print splitee
      

      【讨论】:

      • “包装/分割应该只在空格上进行”[...]“正确地变成可读(而不是文字裁剪)的块”。
      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      相关资源
      最近更新 更多