HOWTO · Python
CSV.Error: Python で行に Null バイトが含まれています
null バイトを含む CSV ファイルを読み込もうとすると、CSV エラー: 行に 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つの解決策です。
- メモリ バイト ストリームでの変換
- NULL バイトを空の文字列に置き換える
- 固定回線での受け渡し
オブジェクトのインメモリ バイト ストリームの変換
このエラーは、オブジェクト ファイルのメモリ内バイト ストリームを変換することで解決できます。 以下は、それをメモリ内バイトストリームに変換するのに役立つコードです。
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 をサポートするシステムにファイルを転送することによって実行できます。