2016-08-17 7 views
0

私は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 

答えて

1

方法ファイル。 Windowsのボックスに同じスクリプトを置くと、デフォルトのエンコーディングは "utf-8"にならないでしょう。

0

使用例外処理:これについて

+0

本当に「試し」で 'with'をラップする必要がありますか?エラーでもそれができますか? –

+0

IIRC、それはUnicodeDecodeErrorをスローする 'open()'のTextWrapperです。 –

+0

ありがとうございました! –

関連する問題