こんにちは、しらすです。
スクレイピングして取得した情報をCSVファイルに出力する際、無効なバイト列でエラーになってしまい出力できないことがありました。
なぜかtry-exceptでもエラーを無視できなかったので色々やり方を調べた結果、以下のコードで簡単に対応できることが分かったのでメモします。
errors="ignore"
以下のような形で使用します。
df.to_csv(output_file, mode='w', encoding = 'utf_8', index=False, header=False, errors="ignore") #無効なバイト列を無視する
ちなみに、私の場合はデータを格納する際はリスト型で格納し、出力する際にDataFrameに変換して出力しています。特に深い意味はないですが、安定して挙動しており、以下のような関数を使いまわしています。
※エンコーディングは環境に合わせて変更する
import pandas as pd
def output_csv(output_file, txt_list):
# pandasデータフレーム型に変換(CSV出力用)
df = pd.DataFrame(txt_list)
# CSV形式で出力(出力時のエンコードエラーを無視する)
df.to_csv(output_file, mode='w', encoding = 'utf_8', index=False, header=False, errors="ignore")
ignore以外にも以下の種類があります。
errors='replace' # 無効なバイト列を?に置き換える
errors='backslashreplace' # 無効なバイト列にバックスラッシュを添える
errors='surrogateescape' # サロゲート領域の代理バイト列に置き換える
以上、超簡単にですがCSV出力を安定させるために無効バイトを無視する方法でした。
少しでもだれかのご参考になれば幸いです。
コメント