ID;Col1;Col2;Col3;Col4;Col5
Python 3.3.0 を使用して、csv ファイル (ヘッダー: )から「辞書」を作成しました。
ID;Col1;Col2;Col3;Col4;Col5
15345;1;1;nnngngn;vhrhtnz;latest
12345;12;8;gnrghrtthr;tznhltrnhklr;latest
90834;3;4;something;nonsens;latest
12345;34;235;dontcare;muhaha;oldone
コード付き
file = "test.csv"
csv_file = csv.DictReader(open(file, 'r'), delimiter=';', quotechar='"')
ID = 12345 の行をファイルではなく新しい辞書にコピーしたかったのです。列名を直接アドレス指定できるようにしたかったので、リストではなく辞書にコピーする必要がありました。私はこれをやってみました
cewl = {}
for row in csv_file:
if row['ID'] == '12345':
cewl.update(row)
print(cewl)
出力は次のとおりです。
{'ID': '12345', 'Col1': '34', 'Col2': '235', 'Col3': 'dontcare', 'Col4': 'muhaha', 'Col5': 'oldone'}
私の問題: ID=12345 の 2 行目のみがコピーされ、最初の行は省略されています。理由はわかりません。
新しいリストにコピーしてこれを試すと(テスト目的のみ)、すべて正常に機能します。
cewl = []
for row in csv_file1:
if row['ID'] == '12345':
cewl.append(row)
print(cewl)
出力は次のとおりです。
[{'Col3': 'gnrghrtthr', 'Col2': '8', 'Col1': '12', 'Col5': 'latest', 'Col4': 'tznhltrnhklr', 'ID': '12345'},
{'Col3': 'dontcare', 'Col2': '235', 'Col1': '34', 'Col5': 'oldone', 'Col4': 'muhaha', 'ID': '12345'}]
なぜこれが新しい辞書にコピーしてもうまくいかないのかわかりません... dictreader の .add や .append のようなメソッドはないようです。
行を失うことなくデータを新しい辞書にコピーするにはどうすればよいですか?