如何在Python中将长字符串分割为短字符串列表

3 投票
2 回答
5959 浏览
提问于 2025-04-16 18:40

在我现在的django项目中,我有一个模型用来存储非常长的字符串(每条数据库记录可以有5000到10000个字符,甚至更多),然后当用户调用记录时,我需要把这些字符串拆分开来(在数据库中确实需要保持为一条记录)。我需要的是返回一个列表(queryset?这取决于是在“SQL”部分处理,还是获取所有列表后在视图中进行解析),这个列表里的每个字符串长度在100到500个字符之间。

我找不到任何关于python的拆分命令或示例,或者任何相关的答案……

我可以数单词并添加到列表中,但数单词……我相信应该有某种函数可以处理这种情况……

编辑:谢谢大家,但我想我没有表达清楚,

举个例子:

字符串:“这是一个非常长的字符串,里面有很多很多很多很多的句子,而且没有一个字符可以用来拆分,只能按单词的数量来拆分。”

这个字符串是django模型中的一个textField。

我需要每5个单词拆分一次,这样我会得到:

['这是一个非常长的字符串','里面有很多很多很多很多','的句子,而且没有一个字符','可以用来拆分,只能按单词','的数量来拆分。']

问题是几乎所有编程语言都有按单词数量拆分的工具函数,但我在python中找不到。

谢谢,

Erez

2 个回答

1

这里有个想法:

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
8

在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不太清楚为什么会这样。

通常,这种问题可能是因为我们没有正确地使用这个库,或者是库本身有一些限制。解决这些问题的第一步是仔细阅读库的文档,了解它的使用方法和注意事项。

另外,查看其他人遇到的类似问题和解决方案也是一个好主意。很多时候,别人已经遇到过同样的情况,并且在网上分享了他们的经验和解决办法。

总之,遇到问题时,不要着急,先查阅资料,看看是否能找到答案。如果实在解决不了,可以考虑向社区求助,通常会有人乐意帮忙。

>>> 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']

撰写回答