본문 바로가기
파이썬 - 분석 라이브러리

[파이썬] Open() 함수, UnicodeDecodeError, chardet, chardet.detect()

by myoongs 2024. 8. 21.

파이썬에서 csv 파일을 불러올 때 판다스 라이브러리의 read_csv() 함수를 사용할 수도 있지만 open() 함수로도 불러올 수 있다.  판다스 라이브러리로 csv 파일 불러오는 방법은 이전 글에서 다루었으니 오늘은 open() 함수 사용 방법만 정리하도록 하겠다.

 

open() 함수로 파일 불러오기

코랩 기준으로 open() 함수로 파일을 불러오기 위해서는 코랩에 해당 데이터를 업로드해야한다.

 

1. 코랩의 좌측 목차 창에 위치한 "폴더" 아이콘을 클릭하여 창을 열고 내 컴퓨터에 있는 csv 파일을 마우스로 드래그하여 폴더 창 안에 넣는다.

 

2. 파일 업로드가 완료되면 아래 이미지처럼 해당 파일의 이름이 뜬다. 

 

3. open() 함수를 사용하여 파일을 불러온다.

    함수 사용방법은 아래와 같다: 

         with open('파일명.csv') as 별칭:

         ** 파일명: 불러오고자 하는 csv 파일의 이름

         ** 별칭: 불러오려는 파일을 다룰 때 지칭할 간단한 버전의 이름

 

파일을 불러오는 방법은 위와 같이 간단하다. 

다만, 가끔 csv 파일의 한글 텍스트의 인코딩 방식에 따라 아래와 같은 UnicodeDecodeError 가 뜨기도 한다.

 

UnicodeDecodeError :  

파이썬의 open() 함수는 기본적으로 텍스트 파일이 UTF-8 형식으로 저장되어 있다고 가정하기 때문에 같은 형식이 아닐 경우 위와 같은 에러가 뜬다. 따라서, open() 함수로 파일을 열었을 때 UnicodeDecodeError가 발생한다면 불러오려는 파일의 인코딩 방식을 알아야 한다. 

 

파일의 인코딩 방식 확인 방법은 chardet 패키지의 chardet.detect() 함수를 사용하면 문자 인코딩 방식을 알아낼 수 있다. 참고로, 코랩의 경우 이 패키지가 이미 설치되어 있어서 별도로 설치할 필요가 없다.

 

파일 인코딩 방식 확인을 위한 코드 작성은 아래와 같다:

    import chardet

    with open('파일명,csv', mode='rb') as 별칭:

        d= f.readline()

    print(chardet.detect(d))

** mode='rb' :

open() 함수로 텍스트 파일을 열 때 mode 매개변수를 바이너리 읽기 모드인 rb로 지정해야한다. 

바이너리 모드로 지정하면 문자 인코딩 형식에 상관없이 파일을 열 수 있어서 오류가 생기지 않는다 

다만, 텍스트 파일을 바이너리 모드로 읽으면 모든 글자를 1바이트로 인식하기한다.

따라서, 한글과 같은 유니코드 문자를 화면에 올바르게 출력할 수는 없다. 

 

** f.readline() :

여기서 f는 파일의 별칭이고, readline()은 해당 파일의 행을 읽는 함수다. 

테이블 형태의 데이터의 경우 보통 첫번째 행이 각 열의 이름이므로 f.readline()을 한번만 사용하면 주로 열이름이 제시된다. 

 

** chardet.detect(d) :

파일의 첫 행 정보를 d 변수로 저장하였다.

따라서, d에 저장된 데이터의 인코딩 방식 확인을 위하여 chardet.detect() 함수에 d 를 넣어준다

 

위 코드를 실행하면 아래와 같은 결과가 나오는데, encoding: EUC-KR로 뜬다.

 

EUC-KR은 한글을 위한 완성형 인코딩 중 하나로 2 바이트를 사용한다.

UTF-8은 전 세계 모든 문자를 컴퓨터에 표현하기 위해 만들어진 유니코드 (unicode)를 인코딩 하는 방식 중 하나다. 최대 4 바이트까지 사용한다. 

 

열고자 하는 파일의 인코딩 방식을 확인했으면 open() 함수를 사용할 때 해당 인코딩 방식으로 지정하면 된다. 

open() 함수 안에 encoding='EUC-KR'을 넣어주면 에러 없이 실행된다. 

 

csv 파일은 판다스로 읽는 것이 더 편리하다.

하지만, 아주 큰 파일을 열 때는 시간이 오래 걸릴 수 있어서 open() 함수와 readline() 함수로 빠르게 처음 몇 줄을 확인해 보는 것도 좋다.

 

판다스 라이브러리의 read.csv() 혹은 read.excel() 함수로 파일 여는 방법은 아래 링크에서 확인할 수 있다.

 

1. 구글 코랩, 구글 드라이브와 마운팅하여 불러오기

https://myoongs.tistory.com/6

 

[파이썬] 구글 코랩(colab)으로 파일 불러오기 - 구글 드라이브 연동 (마운트)

구글 코랩에서 특정 파일을 연결하여 사용하는 방법이 몇 가지 있는데, 그 중 구글 드라이브에서 파일 불러오는 방법을 정리해보겠다. 구글 드라이브에서 파일 불러오기 (마운트)내 구글 드라

myoongs.tistory.com

 

2. 구글 코랩, 로컬 PC에서 파일 불러오기

https://myoongs.tistory.com/7

 

[파이썬] 구글 코랩(colab)으로 파일 불러오기 - 로컬 PC에서 불러오기

구글 코랩에서 구글 드라이브와 연동하여 파일을 불러올 수도 있지만 로컬 PC에서도 가져올 수 있다. 로컬 PC에서 불러오는 방법은 아래와 같다. 불러오는 코드는: from google.colab import filesuploaded

myoongs.tistory.com

 

오늘 정리한 내용은 < 혼자 공부하는 데이터 분석 with 파이썬 > 이라는 책을 참고하였다.

 

이번에 처음 열어본 책이라 다른 내용은 아직 보지 못했지만 빠르게 훑어보았을 때 파이썬으로 데이터 분석 하는 방법을 단계별로 쉽게 배우고 싶다면 괜찮은 책인 것 같다는 생각이 들었다. 어려운 분석까지 다루는지는 모르겠지만 간단한 분석과 시각화, 약간의 머신러닝 정도를 커버하는 것으로 보인다.  

반응형