[python/pandas] read_csv에서 line contains NULL byte 에러

Error-

  Line contains NULL byte

 

원인-

  말 그대로 파일에 NULL 바이트가 섞여서 판다스에서 read_csv로 변환할 수 없다는 에러이다.

  보통 utf-16 인코딩 파일을 읽어오려할 때 발생한다.

 

해결법-

  가장 간단한 방법은 원본파일의 인코딩을 재설정하는 것이다.

  팁으로 가장 간단하게 메모장으로 열어서 인코딩만 바꿔 재 저장해주는 방법이 있다.

  리눅스에서는 

  $ iconv -c -f utf-16 -t utf-8 file.csv > file2.csv

  명령어를 통하여 인코딩을 바꿔줄 수 있다.

  이 경우 추가적으로 file separation을 제대로 못 잡아주는 경우가 생길 수 있다.

  이 경우엔 명시적으로 sep='\t'옵션을 주면 해결되는 경우가 대부분이다.

보통 인코딩을 모르는 미지의 파일을 파이썬의 open()함수를 통하여 열 시에 위와같은 오류가 종종 발생한다.

 

그 이유는 파이썬은 utf-8이 기본 인코딩인데, utf-8로 해당 문서를 열려고 했더니 문제가 발생했다는 것이다.

 

이때는 open()함수의 encoding 파라미터를 통하여 인코딩 방식을 다른 방법으로 지정해 주면 파일이 열린다.

 

보통 윈도우에서 작성하거나 웹에서 긁어온 문서는 'euc-kr' 혹은 'cp949'로 대부분 해결이 된다.

 

가끔 해외에서 작성된 문서의 경우 'latin_1'인코딩도 종종 보인다.

 

즉, open("file.name", "r", encoding='euc-kr')의 식이다.

 

그러나 저 두가지 인코딩을 사용하였는데도 제대로 작동이 안되는 경우에는 인터넷에서 직접 인코딩 방식을 찾아 보아야 한다.

 

파일 인코딩 알아보기

 

파일 인코딩 확인법(How to find out file encoding)

GNU 시스템 하에서는 해당 폴더로 이동한 후에 file * 혹은 file --mime-encoding * 을 명령줄에 쳐주면 인코딩 방식이 나온다. 윈도우에서는 git bash를 깔면 gnu시스템을 이용할 수 있으므로 위와같이 해주면 되..

omnil.tistory.com

 

그런데 이 방식을 활용하여도, 인코딩은 저렇게 해놓고, 실제 내부에서 인코딩된 문서가 쓰인 방식이 다를 수 있다.

(가령 저 인코딩 방식으로 파일이 열리는데도 그 안에서도 파일이 깨져보이는 경우)

 

그때는... 답 없이 경험에 의지해서 여러 인코딩 방식을 시험해보는 수밖에 없다.

그것이 바로 위에서 말했던 latin_1, euc-kr, cp949등 이다.

 

더욱 많은 인코딩 방식은 파이썬의 공식 도큐멘테이션에 2/3 지점에 나와있다.

만일 해당 국가가 한국이 아니라 중국, 대만, 일본 등이면 그에 맞는 인코딩 방식을 하나하나 시험해보는 수 밖에 없다.

GNU 시스템 하에서는 해당 폴더로 이동한 후에

file *

혹은

file --mime-encoding *

을 명령줄에 쳐주면 인코딩 방식이 나온다.

 

윈도우에서는 git bash를 깔면 gnu시스템을 이용할 수 있으므로 위와같이 해주면 되고, 완전 naive한 윈도우즈라면, 사실 파일을 윈도우 내장 메모장으로 열어서 재저장할때 인코딩 방식을 볼 수 있다.

'Study > Computer' 카테고리의 다른 글

CLI? GUI? 그게 뭐죠? 먹는건가요...?  (0) 2019.07.10
[Git/Github] Git? 깃?  (0) 2019.07.08

+ Recent posts