2017-06-09 5 views
0

私はPythonスクリプトによって生成された巨大なCSVを持っています。一部のセルにはデータの配列が含まれ、他のセルには単一項目の配列が含まれます。いくつかの例:配列の文字列表現から配列を再構築する方法は?

cell01 == ['"July, 2002"', 'CUREE Publication No. CEA-01.', 'Project No. 3126', 'Prepared for Consortium of Universities for Research in Earthquake Engineering.'] 
cell02 == ['[Memorandum from Ralph J. Johnson on Andy Place].'] 
cell03 == ["Financial statements for the years ended March 31, 1991 and 1990 and independent auditors' report"] 

理想的には、私は次のように見える構造にすべてのデータを解析したいと思います:

cell01_parsed[0] == '"July, 2002"' 
cell01_parsed[1] == 'CUREE Publication No. CEA-01.' 
cell01_parsed[2] == 'Project No. 3126' 
cell01_parsed[3] == 'Prepared for Consortium of Universities for Research in Earthquake Engineering.' 

cell02_parsed == '[Memorandum from Ralph J. Johnson on Andy Place].' 

cell03_parsed == 'Financial statements for the years ended March 31, 1991 and 1990 and independent auditors\' report' 

私はcsv.reader()またはcsv.DictReader()を使用する場合ただし、これらの行が解析されています配列ではなく文字列として扱います。これを行う簡単な方法は何でしょうか?私はsplit(',')を使用できません。文字列の中には、項目の途中にカンマがあるためです。

+0

[ 'shlex.split()'](HTTPS://docs.python。 org/3.5/library/shlex.html#shlex.split)は、引用符付きの文字を保存します... – JakeD

+0

あなたの問題は何か分かりません。私は 'csv.writer()'を使って最初のコードセクションからデータを書き出し、 'csv.reader()'を使ってそれを読み戻しました。結果はまさにあなたが期待していたようでした。私は、途中で説明していないことがあると思います。データはどのように書かれていますか? – ktb

+0

私は 'csv.DictWriter()'を使用していました。すべてのデータが31列まででしたが、正確にはそうではなかったからです。 – RalphORama

答えて

0

あなたはそうのように(自分のデータに合うものを見つける)正規表現で、あなたの文字列を分割しようとすることができます:

import re 
test_str = '"July, 2002", CUREE Publication No. CEA-01.' 
re.compile(',(?!.+\")').split(test_str) 
+0

処理するデータ量がかなりあります(15k行、31列)ので、正規表現がデータを誤って解釈する恐れがあります。私はshlex.split()を@pycoder suggesterとして使うつもりだと思う – RalphORama

関連する問題