2012-09-06 8 views
19

私はPythonの新機能です。Python Parse CSVが正しく

1997,Ford,E350,"Super, luxurious truck"

('1997', 'Ford', 'E350', 'Super, luxurious truck')

とNOT上記

('1997', 'Ford', 'E350', '"Super', ' luxurious truck"')

ように分割する必要があります例えば、私が得るものです - 私はそれが引用された値を認識するようにCSVファイルを解析しますstr.split(,)のようなものを使用すると

どうすればよいですか? また、配列やその他のデータ構造にこれらの値を格納するのが最善でしょうか?私はcsvからこれらの値を取得した後、簡単に選択できるようにしたいので、列のいずれか2つを言い、別の配列やその他のデータ構造として格納することができます。

+0

私は質問を編集しました。区切り文字 '、'を使用すると、引用符内の '、'は認識されません。 – cornerstone

+0

「引用」を定義する必要があります。 –

答えて

14

メソッドは完全に働いた

d = {} 
d['column1name'] = [] 
d['column2name'] = [] 
d['column3name'] = [] 

dictReader = csv.DictReader(open('filename.csv', 'rb'), fieldnames = ['column1name', 'column2name', 'column3name'], delimiter = ',', quotechar = '"') 

for row in dictReader: 
    for key in row: 
     d[key].append(row[key]) 

カラムは、カラム名をキーとして辞書に格納されます。

+0

col3nameの前に一重引用符がありません。 – codingknob

18

あなたがcsvモジュールを使用する必要があります。

import csv 
reader = csv.reader(['1997,Ford,E350,"Super, luxurious truck"'], skipinitialspace=True) 
for r in reader: 
    print r 

出力:

['1997', 'Ford', 'E350', 'Super, luxurious truck'] 
+0

ありがとうございます。しかし、ファイルから読み込もうとすると、次のようなエラーが表示されます。 - 'csv.Error:行にNULLバイトが含まれています ' ファイルには、おそらく次のような百万行が含まれています: ' 1 ,, " "car-8554.gif"、 "car.gif"、 "crs_04"、 "rand strを変更する、posを削除する、35289、サイズを追加する、9242" – cornerstone

+0

@cornerstone:このファイルはどうやって作成していますか?あなたは通常の方法でここに表示するNULLバイトを取得するつもりはありませんが、それがファイルにある場合は、それをテキストとして扱うとほぼすべての方法で読むことが問題になります。 – geoffspear

+0

@woobleは、SQLデータ値をcsvファイルにダンプすることによって作成されました。 私はヌル値が連続した ",,"行の存在に起因すると考えました。私はその解決策を考え出しました。 csv_file: 'open(r'car.csv ')とcsv_file: ... reader = csv.reader((csv_fileの行には、行。置換(' \ 0 '、' '))、区切り文字='、 '、 quotechar = '"') ... print(reader.next())' – cornerstone

5

あなたはcsv.reader()声明whithin quotecharとしてダブルクォートを定義する必要がありを次の

>>> with open(r'<path_to_csv_test_file>') as csv_file: 
...  reader = csv.reader(csv_file, delimiter=',', quotechar='"') 
...  print(reader.next()) 
... 
['1997', 'Ford', 'E350', 'Super, luxurious truck'] 
>>> 
1

CSVモジュールを使用しない場合は、正規表現を使用する必要があります。あなたがしようとした場合

import re 
array = re.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", '1997,Ford,E350,"Super, luxurious truck"') 

:これを試してみてください

print(array[3]) 

あなたが得られます。

"Super, luxurious truck"