#python #django #django-queryset #python-2.6
#python #django #django-набор запросов #python-2.6
Вопрос:
В моем текущем проекте django у меня есть модель, которая хранит очень длинные строки (может быть 5000-10000 или даже больше символов на запись в БД), а затем мне нужно разделить их, когда пользователь вызывает запись (это действительно должно быть в одной записи в БД). Что мне нужно, так это вернуть список (queryset? зависит от того, используется ли в части «SQL» (или получение всего списка как есть и выполнение синтаксического анализа в представлении) более коротких строк (100-500 символов на строку в списке, который я возвращаю в шаблон).
Я нигде не смог найти команду разделения python, ни пример, ни какой-либо ответ на это….
Я всегда мог считать слова и добавлять, но не считал слова…. но я уверен, что для такого рода вещей должна быть какая-то функция….
РЕДАКТИРОВАТЬ: спасибо всем, но, я думаю, меня не поняли,
Пример:
Строка: «Это очень длинная строка со многими, очень многими и многими другими предложениями, и в ней нет ни одного символа, который я мог бы использовать для разделения, просто по количеству слов»
строка представляет собой текстовое поле модели django.
мне нужно разделить ее, скажем, каждые 5 слов, чтобы я получил:
[‘Это очень длинная строка’, ‘содержащая много-много-много-много’, ‘и еще много предложений и’, ‘нет ни одного символа’, ‘который я мог бы использовать для’, ‘разделить на, просто по номеру’, ‘из слов’]
Дело в том, что почти в каждом языке программирования есть разделение на количество слов «типа служебной функции, но я не могу найти ее в python.
спасибо, Erez
Комментарии:
1. Вероятно, вам следует добавить пример, чтобы прояснить вопрос.
2. Я обновил свой ответ, чтобы охватить разделение по количеству слов.
3. вы смотрели на перенос в django ulits? делает что-то подобное для фильтра шаблонов — code.djangoproject.com/browser/django/trunk/django/utils /…
Ответ №1:
>>> s = "This is a very long string with many many many many and many more sentences and there is not one character that i can use to split by, just by number of words"
>>> l = s.split()
>>> n = 5
>>> [' '.join(l[x:x n]) for x in xrange(0, len(l), n)]
['This is a very long',
'string with many many many',
'many and many more sentences',
'and there is not one',
'character that i can use',
'to split by, just by',
'number of words']
Комментарии:
1. 10x’ это здорово, и на самом деле неплохо с моими очень длинными текстами тоже 🙂
Ответ №2:
Вот идея:
def split_chunks(s, chunksize):
pos = 0
while(pos != -1):
new_pos = s.rfind(" ", pos, pos chunksize)
if(new_pos == pos):
new_pos = chunksize # force split in word
yield s[pos:new_pos]
pos = new_pos
Это пытается разделить строки на куски не более chunksize
по длине. Он пытается разделить на пробелы, но если это не удается, он разбивается в середине слова:
>>> foo = "asdf qwerty sderf sdefw regf"
>>> list(split_chunks(foo, 6)
['asdf', ' qwert', 'y', ' sderf', ' sdefw', ' regf', '']
Я предполагаю, что это требует некоторой настройки (например, как обрабатывать разбиения, которые происходят внутри слов), но это должно дать вам отправную точку.
Чтобы разделить по количеству слов, сделайте это:
def split_n_chunks(s, words_per_chunk):
s_list = s.split()
pos = 0
while pos < len(s_list):
yield s_list[pos:pos words_per_chunk]
pos = words_per_chunk