5

"1,,2'3,4'"リストに変換するにはどうすればよいですか? 引用符で囲まれている場合を除き、個々の項目はカンマで区切られます。その場合、項目にコンマを含める必要があります。

これは望ましい結果です: ['1', '', '2', '3,4']. 引用符を無視するために別のスレッドで見つけた1つの正規表現は次のとおりです。

re.compile(r'''((?:[^,"']|"[^"]*"|'[^']*')+)''')

しかし、これにより次の出力が得られます。

['', '1', ',,', "2'3,4'", '']

これらの余分な空の文字列がどこから来ているのか、なぜ2つのコンマが一緒に印刷されているのか、ましてやまったく印刷されているのか、私には理解できません。

私はこの正規表現を自分で作ってみました:

re.compile(r'''(, | "[^"]*" | '[^']*')''')

結局何も検出されず、元のリストが返されました。

理由がわかりませんが、少なくともコンマを検出するべきではありませんか? ?コンマの後にa を追加すると、同じ問題が発生します。

4

2 に答える 2

10

csv扱っているのは CSV 文字列であるため、正規表現の代わりにモジュールを使用した方がよい場合があります。

from cStringIO import StringIO
from csv import reader

file_like_object = StringIO("1,,2,'3,4'")
csv_reader = reader(file_like_object, quotechar="'")
for row in csv_reader:
    print row

これにより、次の出力が得られます。

['1', '', '2', '3,4']
于 2012-08-04T02:59:52.973 に答える