Самый короткий способ разбить длинную строку (добавить пробел) после 60 символов? - PullRequest
4 голосов
/ 23 сентября 2010

Я обрабатываю кучу строк и отображаю их на веб-странице.

К сожалению, если строка содержит слово длиной более 60 символов, это приводит к взрыву моего дизайна.

Поэтому я ищу самый простой и эффективный способ добавить пробел после каждых 60 символов без пробелов в строке в python.

Я только придумал неуклюжие решения, такие как str.find(" ") два раза, и проверил, есть ли разница в индексе > 60.

Любые идеи приветствуются, спасибо.

Ответы [ 3 ]

5 голосов
/ 23 сентября 2010
>>> import textwrap
>>> help(textwrap.wrap)
wrap(text, width=70, **kwargs)
    Wrap a single paragraph of text, returning a list of wrapped lines.

    Reformat the single paragraph in 'text' so it fits in lines of no
    more than 'width' columns, and return a list of wrapped lines.  By
    default, tabs in 'text' are expanded with string.expandtabs(), and
    all other whitespace characters (including newline) are converted to
    space.  See TextWrapper class for available keyword args to customize
    wrapping behaviour.
>>> s = "a" * 20
>>> s = "\n".join(textwrap.wrap(s, width=10))
>>> print s
aaaaaaaaaa
aaaaaaaaaa

Любые добавленные дополнительные символы новой строки будут обрабатываться браузером как пробел.

В качестве альтернативы:

def break_long_words(s, width, fix):
  return " ".join(x if len(x) < width else fix(x) for x in s.split())

def handle_long_word(s):  # choose a name that describes what action you want
  # do something
  return s

s = "a" * 20
s = break_long_words(s, 60, handle_long_word)
0 голосов
/ 23 сентября 2010
def splitLongWord ( word ):
    segments = list()
    while len( word ) > 0:
        segments.append( a[:60] )
        word = a[60:]
    return ' '.join( segments )

myString = '...' # a long string with words that are longer than 60 characters
words = list()
for word in myString.split( ' ' ):
    if len( word ) <= 60:
        words.append( word )
    else:
        words.extend( splitLongWord( word ) )
myString = ' '.join( words )
0 голосов
/ 23 сентября 2010

def make_wrappable(your_string):
    new_parts = []
    for x in your_string.split():
        if len(x)>60:
            # do whatever you like to shorten it,
            # then append it to new_parts
        else:
            new_parts.append(x)        
    return ' '.join(new_parts)
...