2014-01-06 39 views
1

我想将一个长字符串(比如说500个字符)分成更小的块(比如说,每个< = 100个字符),但保留整个单词。也就是说,块应该尽可能接近100个字符,但不应该截掉整个单词。我的第一反应是将字符串和循环分成每个单词,将每个单词连接到一个缓冲区,直到达到极限,然后重新开始每个单元,但是我认为必须有更有效的方法。将一个字符串分成块,保留Python中的整个字符

谢谢!

+0

<= 100或尽可能接近100?哪一个?或两者? 101是否允许? – Junuxx

+0

不好意思,这是<= 100 – sundance

回答

5

您可以使用textwrap模块在Python这样做:

s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu," 

import textwrap 
var = textwrap.wrap(s, 100) 
for line in var: 
    print(len(line)) 

print(var) 

您可以了解more about it here

Live Demo

+0

完美,谢谢! – sundance

0

如果没有额外的进口,尝试:

s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu," 

out = []; leftover = "" 
for i in map(''.join, zip(*[iter(s)]*100)): 
    i = leftover+i 
    toappend, _ , leftover = i.rpartition(" ") 
    if len(toappend) > 100: 
     leftover = toappend[99:] 
     toappend = toappend[:99] 
    out.append(toappend) 

print out 

[出]:

['Lorem存有悲坐阿梅德,consectetuer adipiscing ELIT。 Aenean commodo ligula eget dolor。 Aenean','massa。 Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus。 Donec','quam felis,ultricies nec,pellentesque eu,pretium quis, sem。 Nulla consequat massa quis enim。 Don','ecpede justo,fringilla vel,nec aliquet nec,vulputate eget,arcu。在enim justo,rhoncus ut, imperdiet','a,venenatis vitae,justo。 Nullam dictum felis eu pede mollis pretium。整数tincidunt。 Cras','dapibus。 Vivamus elementum semper nisi。 Aenean vulputate eleifend tellus。 Aenean LEO ligula, portti']

+0

@alvas,我认为这正是OP想要避免的...... – alvas

1
import textwrap 

long_string = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu,' 
string_list = textwrap.wrap(long_string,100, drop_whitespace = False) 

for line in string_list: 
    print(line) 

print(string_list) 

输出:

['Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean ', 'massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ', 'quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. ', 'Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, ', 'imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. ', 'Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, ', 'porttitor eu,'] 

使用drop_whitespace =假保持原有间距

查阅其他选项here

相关问题