2017-05-11 10 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}, 

私はそれ自身のオブジェクトにそれぞれの行を解析しようとしていますが。

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

そして:

[y.strip() for y in content[x].split(''',(?=(?:[^'"]|'[^']*'|"[^"]*")*$)''')] 
しかし、説明の一部は、その中にコンマを持っているので、私はカンマで分割することはできません。..

は、私が見つけることができるStackOverflowの記事からこの二つの正規表現のラインを試してみました

。しかしながら、これら両方の出力

['{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.", 

任意のアイデアを、私はこの問題を解決する方法だから正しく各行を2つではなく3つの別々のセクションに分割しますか?ありがとう

+0

ここで「オブジェクト」が意味することは私には不明です。あなたはPython辞書のリストを作成しようとしていますか? –

+0

@DavidCはい!ブラッドの解決策はちょっと混乱して私をそこに連れていくようですが – 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

すばらしい答え!あなたは辞書のリストにそれを適用することもできます、それは動作します。まあ、入力ファイル_was_yamlのためかもしれません。しかし、何でも。 –

+0

驚くばかり!私は辞書の独自のリストを持っている "AdditionalCookout"のような多くのクラスが組み込まれているので、行ごとにファイルを読んでいる。しかし、これはちょっと混乱して仕事を完了する!ありがとう= D – knave

+0

ポイントは@ Jean-FrançoisFabreです。 –

関連する問題