DictReader() を使用して csv ファイルを読み取っています。この関数は、ヘッダー項目がキーでセルが値である辞書を返します。とてもクールですね。
しかし、データが期待どおりではない可能性がある行を考慮しようとしています。その場合 (ValueError 例外をキャッチしています)、「疑わしい」行を別の辞書に入れて手動で処理したいと思います。
私の質問はこれです:最初の辞書(DictReaderによって返されるオブジェクト)にはすべてのキーが適切に設定されているので、どのようにコピーすればよいのでしょうか?キーだけ2 番目の辞書、つまり疑わしい行の辞書のみを手動で処理する辞書に入力すればよいのでしょうか?
しばらく dict.fromkeys() などをいじっていますが、まったく進展がありません。助けてください!
編集: 間違ったコードの一部を貼り付けます。恥ずかしいので自分のコードを隠します。私を批判しないでください! ;-)
unsure_rows = dict.fromkeys(dict(csv_reader).keys(), [])
for row in csv_reader:
# if row['Start Time'] != 'None':
try:
if before_date > strptime(row['Start Time'], '%Y-%m-%d %H:%M:%S') > after_date:
continue
except ValueError:
unsure_rows += row
ValueError: 辞書更新シーケンス要素 #0 の長さは 13 です。2 が必要です
ベストアンサー1
近づいてきました。試してください:
dict.fromkeys(my_csv_dict.keys(),[])
これにより、CSV ファイルから解析したのと同じキーを持つ辞書が初期化され、各キーが空のリストにマップされます (疑わしい行の値を追加することになると思います)。
これを試してみてください。(CSV の読み取りを開始する前に unsure_rows を初期化できないなど、ここでは必要な微妙な変更がいくつかあります。)
unsure_rows = None
for row in csv_reader:
# if row['Start Time'] != 'None':
try:
if before_date > strptime(row['Start Time'], '%Y-%m-%d %H:%M:%S') > after_date:
continue
except ValueError:
if not unsure_rows:
# Initialize the unsure rows dictionary
unsure_rows = dict.fromkeys(csv_reader.fieldnames,[])
for key in unsure_rows:
unsure_rows[key].append(row[key])