私はASCIIファイル(utf-8)のリストをcsvリーダーで読み込みたいです。 エラー処理のために、私はユーザーが誤って読み取れないファイルを選択したかどうかを検出するのが好きです。 ソースは次のようなものです。csvリーダーで間違ったファイルフォーマットを検出しました
for File in Filenames:
print ('... processing file :',File)
with open(File, 'r') as csvfile:
Reader = csv.reader(csvfile, delimiter = ';')
for Line in Reader:
print(Line)
(その結果、消費)= self._buffer_decode(データ、self.errors、最終) UnicodeDecodeError: 'UTF-8' コーデックは位置1でバイト0x8bをデコードすることができない。私がメッセージを持っているファイルGZIPed無効な開始バイト
最初は大丈夫ですが、スクリプトはクラッシュします。 エラーをキャプチャして、スクリプトがリスト内の次のファイルにジャンプする方法を見つけられませんでした。私は方言やその他のコーデックについて多くを見つけましたが、私の仕事はコーデックを変更するだけで間違ったファイルを読むことではありません。
コメントありがとうございました!それはあなたが開いたとき、あなたが期待するエンコーディングを含めることをお勧めだ
for File in Filenames:
print ('... processing file :',File)
try:
with open(File, 'r', encoding='utf-8') as csvfile:
Reader = csv.reader(csvfile, delimiter = ';')
for Line in Reader:
print(Line)
except UnicodeDecodeError:
pass
: - https://docs.python.org/3/tutorial/errors.html
あなたのコードは、次にようになり
for File in Filenames:
print ('... processing file :',File)
with open(File, 'r') as csvfile:
try:
Reader = csv.reader(csvfile, delimiter = ';')
for Line in Reader:
print(Line)
except UnicodeDecodeError as e:
print("File {:} cannot be read. Skipping...".format(csvfile))
continue
本当に「試し」で 'with'をラップする必要がありますか?エラーでもそれができますか? –
IIRC、それはUnicodeDecodeErrorをスローする 'open()'のTextWrapperです。 –
ありがとうございました! –