Разбиение строки переменной длины на несколько частей в Python - PullRequest
7 голосов
/ 16 января 2012

У меня есть база данных:

Как вы можете видеть в столбце 'desc', текст имеет переменную длину (то есть никакие две строки, которые я извлекаю из этой базы данных, не будут иметь одинаковую длину). Со временем я добавлю еще много записей в эту базу данных, но сейчас я тестирую и начинаю с этого.

Прямо сейчас у меня есть следующий код на python, чтобы взять эти блоки строки и отобразить их:

cmd = input(Enter command:)
sql = "SELECT cmd,`desc` FROM table WHERE cmd = '"+ cmd +"'"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
    print("Command: "+ row[0] +":\n")
    print("Description: "+ row[1][:40] +"\n")
    if (len(row[1]) > 40):
       print(row[1][40:85])
    if (len(row[1]) > 85):
       print(row[1][85:130])
    if (len(row[1]) > 130):
       print(row[1][130:165])
    if (len(row[1]) > 165):
       print(row[1][165:])

Разделение здесь работает до такой степени, например:

Команда: close:
Описание: эта команда создаст кнопку «Закрыть»
n в окне сообщения для вызывающего символа
Acter. Если в данный момент на экране нет окна, t
Выполнение сценария закончится.

Как видно из приведенного выше примера выходных данных, при разбиении некоторые символы обрезаются в среднем слове. Учитывая тот факт, что строки могут быть любой длины между скажем ... всего 20 символов и до 190 строк, и я хочу разбить строку на куски, скажем ... 8 слов каждая из-за нехватки места, как бы я пошел об этом?

Ответы [ 3 ]

16 голосов
/ 16 января 2012

Проверьте модуль textwrap .

>>> import textwrap
>>> 
>>> s = "This command will create a 'close' button in the message window for the invoking character. If no window is currently on screen, the script execution will end."
>>> 
>>> wrapped = textwrap.wrap(s, 40)
>>> 
>>> for line in wrapped:
...     print line
... 
This command will create a 'close'
button in the message window for the
invoking character. If no window is
currently on screen, the script
execution will end.

Вы можете выполнить множество настроек TextWrapper.

2 голосов
/ 16 января 2012

Разделите пробелы, чтобы разделить слова, а затем объедините 8 с пробелом в качестве разделителя.

content = "This is some sentence that has more than eight words"
content = content.split(" ")
print content
['This', 'is', 'some', 'sentence', 'that', 'has', 'more', 'than', 'eight', 'words']
print(" ".join(content[0:8]))
This is some sentence that has more than
1 голос
/ 16 января 2012

Вырезать по словам вместо символов, используя python textwrap module:

>>> import textwrap
>>> text = 'asdd sdfdf asdsg asfgfhj'
>>> s = textwrap.wrap(text, width=10)  # <- example 10 characters
>>> s
['asdd sdfdf', 'asdsg', 'asfgfhj']
>>> print '\n'.join(s)
asdd sdfdf
asdsg
asfgfhj
>>> 
...