【Python】文字コードが違っていて読み取れない文字を無視する

Python文字コードが違っていて読み取れない文字を無視する方法です。

Python 3.7.2

問題点

まずpathlibを使ってファイルを読んでみます。

#coding:utf-8
import pathlib

file_path = r"C:\Users\UserName\Desktop\example.txt";
file = pathlib.Path(file_path)

with file.open(encoding = "utf-8") as f:
    lines = f.readlines()
    for line in lines:
        print(line)

ここで、example.txtがShift-JISで保存されていたとします。
英数字だけなら問題なく読めますが、マルチバイト文字が入っていると、

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 31: invalid start byte

みたいなエラーが出てしまいます。

読めなかった文字だけ無視する

codecsを使うと、文字コードエラーで読めなかった文字だけスキップすることができます。

#coding:utf-8
import codecs

file_path = r"C:\Users\UserName\Desktop\example.txt";
with codecs.open(file_path, 'r', 'utf-8', 'ignore') as file:
    lines = file.readlines()
    for line in lines:
        print(line)

Shift-JISで「01234abcdeあいうえお56789fghijかきくけこ」と書かれたファイルを読むと、 「01234abcde56789fghij」と表示されます。

関連

light11.hatenadiary.com