ホームページ >バックエンド開発 >Python チュートリアル >CSV ファイルを読み取るときに Python で UTF8 エンコーディングを処理するにはどうすればよいですか?

CSV ファイルを読み取るときに Python で UTF8 エンコーディングを処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 14:10:30500ブラウズ

How to Handle UTF8 Encoding in Python When Reading CSV Files?

Python を使用した UTF8 CSV ファイルの読み取り

データ交換に一般的に使用される CSV ファイルには、整合性を維持するために UTF8 エンコードを必要とするアクセント付き文字が含まれることがよくあります。ただし、Python csvreader は ASCII データのみをサポートします。

問題

UTF8 エンコードを処理するコードを使用しているにもかかわらず、アクセント付きのフランス語またはスペイン語文字を含む UTF8 CSV ファイルを読み取ろうとすると、次の例外が発生します。が発生しました:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)

解決策

解決策は、encode メソッドの目的を理解することにあります。 Unicode 文字列をバイト文字列に変換しますが、その逆は変換されません。 codecs モジュール、特に UTF8 テキスト ファイルの処理に codecs.open を正しく利用することで、コードを簡素化できます。

<code class="python">import csv

def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
    csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
    for row in csv_reader:
        yield [unicode(cell, 'utf-8') for cell in row]

filename = 'da.csv'
reader = unicode_csv_reader(open(filename))
for field1, field2, field3 in reader:
  print field1, field2, field3 </code>

入力データが UTF8 でない場合、次のようになります。 ISO-8859-1 の場合、コードにはトランスコーディングが必要です:

<code class="python">line.decode('whateverweirdcodec').encode('utf-8')</code>

ただし、CSV は ISO-8859-* でエンコードされたバイト文字列を直接処理できるため、これは多くの場合不要です。

以上がCSV ファイルを読み取るときに Python で UTF8 エンコーディングを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。