2016-08-09 4 views
2

csvファイルからデータを読み込もうとしていますが、各行をそれぞれの列に分割しています。Python - 行を列に分割 - csv data

しかし、特定の列にのコンマがある場合は、私の正規表現はそれ自体ではで失敗しています。

例:5列である

a b c "d,e, g," f 

:私は次のようになりたい

F、B、C、 "D、E、G、"、。 、|:ここ

は、正規表現はカンマ

、([^ "])*)???=(?: "[^"] ()で文字列を分割するために使用していますです(?= [^ "] +(?:、)|、+ | $)

しかし、他の人には効果がありません。

すべては、私がデータフレーム/ RDDにpysparkを使用してCSVファイルからデータを読み込むとき、私はロード/ミス

せずにすべての列を保持したい、ためている探していますが助けを借りて、はるかに簡単あなたに

+0

複数のオプションが用意されている場合はどうしてですか? http://stackoverflow.com/a/34528938/1560062 – zero323

答えて

3

ありがとうございました新しいregexモジュールの:

import regex as re 

string = 'a,b,c,"d,e, g,",f' 
rx = re.compile(r'"[^"]*"(*SKIP)(*FAIL)|,') 

parts = rx.split(string) 
print(parts) 
# ['a', 'b', 'c', '"d,e, g,"', 'f'] 

それは、この例では、二重引用符betweemすべて無視(*SKIP)(*FAIL)メカニズムをサポートしています。


あなたは二重引用符をエスケープしている場合は、使用できます。

import regex as re 

string = '''a,b,c,"d,e, g,",f, this, one, with "escaped \"double",quotes:""''' 
rx = re.compile(r'".*?(?<!\\)"(*SKIP)(*FAIL)|,') 
parts = rx.split(string) 
print(parts) 
# ['a', 'b', 'c', '"d,e, g,"', 'f', ' this', ' one', ' with "escaped "double",quotes:""'] 

regex101.com上、後者のデモを参照してください。ほぼ50ポイントの場合


は、私も csv方法を提供することで感じる:

import csv 
string = '''a,b,c,"d,e, g,",f, this, one, with "escaped \"double",quotes:""''' 

# just make up an iterable, normally a file would go here 
for row in csv.reader([string]): 
    print(row) 
    # ['a', 'b', 'c', 'd,e, g,', 'f', ' this', ' one', ' with "escaped "double"', 'quotes:""'] 
2

正規表現でCSVファイルを簡単に解析できません。

UnixコマンドラインからCSVを処理するためのgo-toツールキットはcsvkitです。https://csvkit.readthedocs.ioから入手できます。これはPythonライブラリも持っています。標準のCSVライブラリの

ザ・Pythonのドキュメントはここにある:

https://softwareengineering.stackexchange.com/questions/166454/can-the-csv-format-be-defined-by-a-regex

がこれはよく踏まパス、およびライブラリ:ここにCSVを解析の広範な議論がありhttps://docs.python.org/2/library/csv.html

あなた自身のコードを振るべきではないほど十分です。