CSV.Error: 줄에 Python의 Null 바이트가 포함되어 있습니다.

Zeeshan Afridi 2023년10월10일
  1. CSV 파일 형식
  2. Python에서 CSV 파일 만들기
  3. Python의 _csv.Error: line contains NULL byte 오류
  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

Python의 _csv.Error: line contains NULL byte 오류

CSV 파일을 읽으려고 할 때 _csv.Error: line contains NULL byte가 표시된다고 가정하면 파일에 하나 이상의 NULL 바이트가 있기 때문일 수 있습니다. 이 문제를 해결하기 위해 CSV 판독기를 실행할 때 --zero-terminated 옵션을 사용할 수 있습니다. 이 옵션은 모든 NULL 바이트를 줄 끝 문자로 처리합니다.

null 값이 있는 경우 다음 오류가 발생합니다.

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

Python에서 _csv.Error: line contains NULL byte 오류 수정

일반적으로 잘못된 인코딩으로 저장된 CSV 파일을 읽으려고 하기 때문에 _csv.Error: line contains NULL byte가 발생합니다. 이 문제를 해결하려면 파일을 읽을 때 올바른 인코딩을 지정해야 합니다.

예를 들어 파일이 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진수 편집기를 사용하여 수행할 수 있습니다.

유효하지 않은 문자가 제거되면 문제 없이 파일을 읽을 수 있습니다.

이러한 유형의 오류에 대한 세 가지 추가 솔루션입니다.

  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 파일의 라인에 널 바이트가 포함되어 있기 때문에 발생합니다. 유니코드를 지원하지 않는 텍스트 편집기를 사용하거나 유니코드를 지원하지 않는 다른 시스템에서 파일을 전송하는 경우 이런 일이 발생할 수 있습니다.

이 오류를 수정하려면 CSV 파일에서 null 바이트가 포함된 줄을 찾아서 제거해야 합니다. 유니코드를 지원하는 텍스트 편집기를 사용하거나 파일을 유니코드를 지원하는 시스템으로 전송하여 이 작업을 수행할 수 있습니다.

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