2017-05-11 182 views
2

我有它的頭看起來像這樣的輸入文件:用逗號分割線,但在引號內不用逗號?

AdditionalCookout.create!([ 
    {day_id: 275, cookout_id: 71, description: "Sample text, that, is ,driving , me, crazy"}, 
    {day_id: 275, cookout_id: 87, description: nil}, 
    {day_id: 276, cookout_id: 71, description: nil}, 
    {day_id: 276, cookout_id: 87, description: nil}, 
    {day_id: 277, cookout_id: 92, description: nil}, 
    {day_id: 277, cookout_id: 71, description: nil}, 

我試圖分析每一行到它自己的對象。但是,我不能逗號分開,因爲一些描述將在其內部逗號..

試圖從StackOverflow的帖子這兩行的正則表達式我能找到的:

re.split(r', (?=(?:"[^"]*?(?: [^"]*)*))|, (?=[^",]+(?:,|$))', content[x]) 

和:

[y.strip() for y in content[x].split(''',(?=(?:[^'"]|'[^']*'|"[^"]*")*$)''')] 

然而..他們兩個輸出

['{day_id: 275', 'cookout_id: 71, description: "Feeling ambitious? If you really want to exhaust yourself today, consider adding some additional stationary cardio."},'] 

Turns into: 
day_id: 275 
cookout_id: 71, description: "Feeling ambitious? If you really want to exhaust yourself today, consider adding some additional stationary cardio.", 

任何想法我怎麼能解決這個問題所以它正確地將每一行分成三個單獨的部分而不是兩個?謝謝

+0

目前還不清楚你是什麼意思的「對象」在這裏。你想創建一個Python字典列表嗎? –

+0

@DavidC Yup!它看起來像布拉德的解決方案會讓我有一點點弄亂,雖然 – knave

回答

2

嘗試使用PyYAML來解析它。以你爲榜樣從我身上學習。 https://pypi.python.org/pypi/PyYAML。那麼你可以避免正則表達式頭痛。

import yaml 
yaml.load('{day_id: 275, cookout_id: 71, description: "Sample text, that, is,driving , me, crazy"}') 
{'cookout_id': 71, 
'day_id': 275, 
'description': 'Sample text, that, is,driving , me, crazy'} 
+1

優秀的答案!你也可以將它應用在dictionarties列表中,它可以工作。那麼,也許這是因爲輸入文件_was_ yaml。但是無所謂。 –

+0

太棒了!我正在逐行閱讀文件,因爲有很多類,比如嵌入了其中的「AdditionalCookout」,它們有自己的字典列表......但是這樣做可以完成一些小小的工作!謝謝= D – knave

+0

採取@ Jean-FrançoisFabre。 –

相關問題