파이썬(Python)

[ chardet ] 파이썬(Python)으로 파일 인코딩 자동 감지하기, 인코딩 탐지기 만들기

카루루1007 2024. 11. 24. 21:37
728x90
반응형

여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.

파이썬 공부하기

판다스 등을 사용하여 csv 파일과 같은 텍스트 파일을 읽어올 때

인코딩 방식이 잘못되어 제대로 읽어올 수 없는 경우가 있습니다.

 

몇 줄의 코드로 인코딩 방식을 자동으로 반영해 주도록 만들 수 있습니다.

 

 준비사항

 

pypi.org에 접속하여 chardet로 검색하신 후

chardet 라이브러리를 설치해줍니다.

pip install chardet

 

 전체코드

 

전체 코드는 다음과 같습니다.

import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
    result = chardet.detect(raw_data)
    return result['encoding']

 

이 함수에 파일 경로를 전달하고 

result를 출력해 보면 다음과 같이 결과가 나타납니다.

{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}

 

반환하는 값은 다음과 같습니다.

encoding : 감지된 인코딩 방식

confidence : 신뢰도 점수(0~1 사이의 값 : 1에 가까울수록 정확도가 높음)

language : 감지된 언어

 

위 코드를 사용하면 인코딩 방식을 자동으로 지정할 수 있습니다.

 

반응형

 보완된 코드

 

하지만 만약 텍스트 파일의 크기가 너무 크다면 

시간이 오래 걸릴 수 있습니다.

인코딩 방식을 확인하기 위해서는 일정 분량의 내용만 검토하면 확인이 가능하기에

불필요하게 많은 자료를 검토할 필요는 없습니다.

 

파일을 검토할 때 용량을 지정하여 어느 정도만 확인할 수 있게 보완한 코드입니다.

import chardet
import os

def detect_encoding(file_path, sample_size=10000):
    file_size = os.path.getsize(file_path)    
    read_size = min(file_size, sample_size)
    
    with open(file_path, 'rb') as file:
        raw_data = file.read(read_size)
    
    result = chardet.detect(raw_data)
    
    return result['encoding']

 

위 코드는 파일 용량이 10KB보다 크다면

10KB 분량만 검토한 후

결과를 도출합니다.

 

보통 이 정도면 결과를 도출하는 데 부족하지 않으나,

더 큰 샘플이 필요하다면 

sample_size를 다음과 같이 변경 호출하여 사용이 가능합니다.

 

아래 코드는 sample_size를 100KB로 변경하여 호출하는 코드입니다.

encoding = detect_encoding("큰파일.csv", sample_size=100000)

 

 마치며

 

간혹 정확하지 않은 경우가 있지만,

대부분의 경우 문제없이 작동합니다.

 

이 코드를 사용하시면 인코딩 방식을 별도로 확인하지 않아도

텍스트 파일을 불러오는데 인코딩 방식에 대한 문제가 대부분 해결됩니다.

 

만약 신뢰도까지 같이 확인하고 싶으시다면

result['confidence']를 사용하시면 됩니다. 

 

728x90
반응형