在python中,如何将很长的字符串拆分为较短的字符串列表
在我当前的django项目中,我有一个模型,它存储非常长的字符串(每个DB条目可以有5000-10000个甚至更多的字符),然后当用户调用记录时,我需要拆分它们(它确实需要在DB中的一个记录中)。我需要的是它返回一个较短字符串的列表(queryset?取决于是在“SQL”部分还是按原样获取所有列表并在视图中进行解析)(我返回到模板的列表中每个字符串100-500个字符) 我在任何地方都找不到PythonSplit命令、示例或任何类型的答案 我总是能数数单词和附加词,但数数单词。。。。但我相信这类事情一定有某种功能 编辑:谢谢大家,但我想我没有被理解 例如: 字符串:“这是一个非常长的字符串,包含许多句子,我不能用一个字符来分割,只能用字数来分割” 该字符串是django模型的文本字段 我需要将其拆分,让我们每5个单词说一次,这样我将得到: [“这是一个很长的字符串”,“有很多”,“还有更多的句子和”,“没有一个字符”,“我可以用它来”,“按数字分割”,“单词数”] 问题是,几乎所有编程语言都有“按字数拆分”的实用函数,但我在python中找不到 谢谢, Erez有一个想法:在python中,如何将很长的字符串拆分为较短的字符串列表,python,django,django-queryset,python-2.6,Python,Django,Django Queryset,Python 2.6,在我当前的django项目中,我有一个模型,它存储非常长的字符串(每个DB条目可以有5000-10000个甚至更多的字符),然后当用户调用记录时,我需要拆分它们(它确实需要在DB中的一个记录中)。我需要的是它返回一个较短字符串的列表(queryset?取决于是在“SQL”部分还是按原样获取所有列表并在视图中进行解析)(我返回到模板的列表中每个字符串100-500个字符) 我在任何地方都找不到PythonSplit命令、示例或任何类型的答案 我总是能数数单词和附加词,但数数单词。。。。但我相信这类
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
试图将字符串分割成最多的块<代码> CukStase<代码>长度。它试图在空格上分裂,但如果不能分割,则在单词的中间分裂:
>>> 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
def分割块(每个块的单词):
s_list=s.split()
pos=0
当pos
为了让问题更清楚,您可能应该添加一个示例。我更新了我的答案,以按字数拆分。您看过django ulits中的wrap吗?模板过滤器是否也有类似的功能-10x'这很好,实际上我的很长文本也不错:-)
>>> 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']