【python】ファイル出力時に無効なバイト列エラーを無視して書き込む

Python

こんにちは、しらすです。

スクレイピングして取得した情報を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出力を安定させるために無効バイトを無視する方法でした。

少しでもだれかのご参考になれば幸いです。

コメント