如何在Python中将长字符串分割为短字符串列表
在我现在的django项目中,我有一个模型用来存储非常长的字符串(每条数据库记录可以有5000到10000个字符,甚至更多),然后当用户调用记录时,我需要把这些字符串拆分开来(在数据库中确实需要保持为一条记录)。我需要的是返回一个列表(queryset?这取决于是在“SQL”部分处理,还是获取所有列表后在视图中进行解析),这个列表里的每个字符串长度在100到500个字符之间。
我找不到任何关于python的拆分命令或示例,或者任何相关的答案……
我可以数单词并添加到列表中,但数单词……我相信应该有某种函数可以处理这种情况……
编辑:谢谢大家,但我想我没有表达清楚,
举个例子:
字符串:“这是一个非常长的字符串,里面有很多很多很多很多的句子,而且没有一个字符可以用来拆分,只能按单词的数量来拆分。”
这个字符串是django模型中的一个textField。
我需要每5个单词拆分一次,这样我会得到:
['这是一个非常长的字符串','里面有很多很多很多很多','的句子,而且没有一个字符','可以用来拆分,只能按单词','的数量来拆分。']
问题是几乎所有编程语言都有按单词数量拆分的工具函数,但我在python中找不到。
谢谢,
Erez
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
在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不太清楚为什么会这样。
通常,这种问题可能是因为我们没有正确地使用这个库,或者是库本身有一些限制。解决这些问题的第一步是仔细阅读库的文档,了解它的使用方法和注意事项。
另外,查看其他人遇到的类似问题和解决方案也是一个好主意。很多时候,别人已经遇到过同样的情况,并且在网上分享了他们的经验和解决办法。
总之,遇到问题时,不要着急,先查阅资料,看看是否能找到答案。如果实在解决不了,可以考虑向社区求助,通常会有人乐意帮忙。
>>> 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']