2011-05-31 70 views
2

在我當前的django項目中,我有一個存儲很長字符串的模型(可以是5000-10000甚至更多字符每個數據庫條目),然後我當用戶調用記錄時需要將它們分開(它確實需要在數據庫中的一條記錄中)。我需要的是它返回一個列表(查詢集?取決於如果在「SQL」部分或獲取所有列表,並在視圖中進行解析)較短的字符串(每列100到500個字符我在列表中返回到模板)。如何將一個非常長的字符串拆分爲Python中較短的字符串列表

我找不到任何地方蟒蛇拆分命令,也不例子或任何類型的答案是的....

我總是可以算的話並追加,但算的話....但我相信有必須是某種對於諸如此類的事情功能....

編輯:謝謝大家,但我想我無法理解,

例子:

的字符串: 「這是一個很長的時間字符串與許多很多許多和更多的句子,並沒有一個字符,我可以用來拆分,只是由字數「

該字符串是一個django模型的textField。

我需要拆分它,可以說每5個字,所以我會得到:

[「這是一個很長的字符串」,「有很多很多很多很多」,「和許多句子和「‘沒有一個字’,‘我可以用它來’,‘通過拆分,只是數’,」話]

的事情是,幾乎每一個編程有語言是拆分每個字的數量「類效用函數但我找不到一個在python中。

感謝, 埃雷茲

+0

你也許應該補充一個例子,使問題更加清晰。 – 2011-05-31 11:16:56

+0

我更新了我的答案,以覆蓋按詞數分解。 – 2011-05-31 12:07:27

+0

你看過django ulits的包裝嗎?爲模板過濾器做了類似的事情 - https://code.djangoproject.com/browser/django/trunk/django/utils/text。py#L11 – JamesO 2011-05-31 12:14:51

回答

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

10x'這真是太棒了,實際上對我很長的文本也沒有壞處:-) – Erez 2011-05-31 13:45:54

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 
相關問題