CSV.Error: Python で行に Null バイトが含まれています

Zeeshan Afridi 2023年10月10日
  1. CSV ファイル形式
  2. Python で CSV ファイルを作成する
  3. _csv.Error: 行に NULL バイトが含まれています Python のエラー
  4. Python の _csv.Error: line contains NULL byte エラーを修正
  5. まとめ
CSV.Error: Python で行に Null バイトが含まれています

CSV ファイルは、カンマ区切りの値を含むテキスト ファイルです。 ファイルの各行はデータの行を表し、各値はカンマで区切られています。

CSV ファイルは、スプレッドシートやデータベースのデータを保存するためによく使用されます。 それらはテキスト エディターまたはスプレッドシート プログラムで開くことができ、プログラミング言語で簡単に解析および処理できます。

CSV ファイル形式

CSV ファイルは、データを表形式で保存するテキスト ファイルです。 テーブルの各行はレコードと呼ばれ、レコード内の各フィールドは列と呼ばれます。

通常、CSV ファイルではコンマを使用して各フィールドを区切りますが、タブやスペースなどの他の文字も使用できます。

CSV ファイルは、データベースやスプレッドシートのデータを保存するためによく使用されます。 これらは、Microsoft メモ帳などのテキスト エディタ、または Microsoft Excel などのスプレッドシート プログラムで開くことができます。

Python で CSV ファイルを作成する

CSV はカンマ区切り値の略で、ファイル内のデータはカンマで区切られ、プレーン テキストとして表形式で保存されます。 ファイルの各行はレコードを表し、列は CSV ファイル内のデータのさまざまな属性を表します。

import csv

meta_data = ["First Name", "Last Name", "Course", "Age"]
student_data = ["Zeeshan", "Afridi", "Computer programming", "24"]

with open("countries.csv", "w", encoding="UTF8") as f:
    writer = csv.writer(f)

    # write the header
    writer.writerow(meta_data)

    # write the data
    writer.writerow(student_data)

# closing the file
f.close()

a = open("countries.csv", "r")
print(a.read())

# closing the file
a.close()

出力:

First Name,Last Name,Course,Age
Zeeshan,Afridi,Computer programming,24

_csv.Error: 行に NULL バイトが含まれています Python のエラー

CSV ファイルを読み込もうとしたときに _csv.Error: line contains NULL byte が発生したとします。これは、ファイルに 1つ以上の NULL バイトが含まれている可能性があります。 これを修正するには、CSV リーダーの実行時に --zero-terminated オプションを使用します。これにより、すべての NULL バイトが行末文字として扱われます。

null 値がある場合、次のエラーが発生します。

file my.csv, line 1: line contains NULL byte

Python の _csv.Error: line contains NULL byte エラーを修正

_csv.Error: line contains NULL byte が発生するのは通常、間違ったエンコーディングで保存された CSV ファイルを読み取ろうとするためです。 これを修正するには、ファイルを読み取るときに正しいエンコーディングを指定する必要があります。

たとえば、ファイルが UTF-8 でエンコードされている場合は、次のコードを使用します。

import csv

with open("filename.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

CSV ファイルを読み込もうとしたときに _csv.Error: line contains NULL byte が発生したとします。ファイルに無効な文字が含まれている可能性があります。 これは、UTF-8 エンコーディングで無効な文字や表示されない文字 (印刷できない文字など) など、いくつかの原因で発生する可能性があります。

このエラーを修正するには、ファイルから無効な文字を特定して削除する必要があります。 これは、テキスト エディタまたは 16 進エディタを使用して行うことができます。

無効な文字が削除されると、ファイルは問題なく読み取れるようになります。

これらは、このタイプのエラーに対する 3つの解決策です。

  1. メモリ バイト ストリームでの変換
  2. NULL バイトを空の文字列に置き換える
  3. 固定回線での受け渡し

オブジェクトのインメモリ バイト ストリームの変換

このエラーは、オブジェクト ファイルのメモリ内バイト ストリームを変換することで解決できます。 以下は、それをメモリ内バイトストリームに変換するのに役立つコードです。

content = csv_file.read()
# after conversion into an in-memory byte stream
csv_stream = io.BytesIO(content)

NULL バイトを空の文字列に置き換える

NULL byte エラーは、行を繰り返し、null バイトを空の文字列に置き換えることで解決できます。 そのためのコードは次のようになります。

# After Iteration through the lines and replacing null bytes with empty string
fixed_lines = (line.replace(b"\x00", b"") for line in csv_stream)

csv_stream の代わりに fixed_lines でオブジェクト ファイルを渡します

このエラーを解決するには、CSV ストリームではなく固定回線を渡す必要があります。 そのためのコードは次のとおりです。

# Below remains unchanged, just passing in fixed_lines instead of csv_stream
stream = codecs.iterdecode(fixed_lines, "utf-8-sig", errors="strict")
dict_reader = csv.DictReader(stream, skipinitialspace=True, restkey="INVALID")

まとめ

CSV エラー 行に NULL バイトが含まれています は、ヌル バイトを含む CSV ファイルの行が原因で発生します。 これは、Unicode をサポートしていないテキスト エディターを使用している場合、または Unicode をサポートしていない別のシステムからファイルを転送している場合に発生する可能性があります。

このエラーを修正するには、ヌル バイトを含む CSV ファイル内の行を見つけて削除する必要があります。 これは、Unicode をサポートするテキスト エディタを使用するか、Unicode をサポートするシステムにファイルを転送することによって実行できます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error