여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
판다스 등을 사용하여 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']를 사용하시면 됩니다.
'파이썬(Python)' 카테고리의 다른 글
[ Basic ] 파이썬(Python) isinstance() 함수에 대한 기본 (0) | 2024.11.21 |
---|---|
[ 한글 자동화 ] 한글 문서 페이지가 홀수이면 빈 페이지 삽입하기 (2) | 2024.11.19 |
[ 알고리즘 ] 파이썬 이진탐색(Binary Search) 알고리즘, 숫자 맞추기 (0) | 2024.11.18 |
[ Basic ] 파이썬 리스트 컴프리헨션(List Comprehension) 이해하기 (0) | 2024.11.16 |
[ Customtkinter ] pack() 메서드 가이드, 간단한 위젯 배치(Tkinter pack()) (2) | 2024.11.15 |