파이선으로 텍스트 관련 처리를 하다 보면
하나의 파일 안에서도 문장마다 다양한 형태로 인코딩 된 경우를 볼 수 있다.
메모장에서도 한글이 포함돼 있지 않다면 해당 문장은 ascii로,
한글이 포함되면 utf-8로 저장되는 것 같다.
혹은 텍스트 포맷을 일괄 변환해주는 툴들을 활용하면 그런 것 같기도 하다.(추측)
텍스트 분할기를 만들다 보니 일반적으로 메모장으로 생성했다면 나오기 힘든 인코딩 타입들을 접하게 된다.
어떻게 생성된 파일인지는 알 수 없지만 문장별로 인코딩이 다른 경우가 많았다.
따라서, 문서 내 정말 특이한 형태의 인코딩이 있는 경우는
가급적 본 작업을 하기 전에 예외처리를 하거나 알람을 줘야 했다.
Python chardet모듈 detect 함수 활용 문장 인코딩 정보 확인
Python chardet 모듈을 활용하면 파일 혹은 url의 인코딩 정보를 확인할 수 있다.
해당 모듈을 활용해서 텍스트 파일 내 문장단위로 인코딩 정보를 확인해본다.
detect 함수를 활용하면 해당 문장의 정보가 map형태로 저장되어 나온다.
그리고 인코딩 정보만 보려면 get() 함수로 'encoding' 키에 대한 정보만 얻으면 된다.
f = open(".\\data\\test.txt")
for i in range(5):
r = chardet.detect(f.readline())
print(r)
print(r.get("encoding"))
결과는 아래와 같다.
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
utf-8
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii
{'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}
utf-8
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
ascii
Python chardet모듈 detect 함수 활용 웹사이트 인코딩 정보 확인
chardet.detect 모듈을 활용하면 url을 통해 웹사이트의 인코딩 정보도 확인할 수 있다.
import urllib.request
with urllib.request.urlopen('https://tistory.com') as f:
r = f.read()
print(chardet.detect(r))
with urllib.request.urlopen('https://interpark.com') as f:
r = f.read()
print(chardet.detect(r))
티스토리는 utf-8로, 인터파크는 EUC-KR로 인코딩 된 것을 확인할 수 있다.
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
{'encoding': 'EUC-KR', 'confidence': 0.99, 'language': 'Korean'}
역시 파이선이 왜 이렇게까지 널리 사용되게 되었는지를 잘 보여주는 좋은 예인 것 같다.
이런 다양한 모듈들을 만들어주는 전 세계 고수들에게 다시 한번 감사를...ㅎㅎ
반응형
'IT, Software > Python' 카테고리의 다른 글
Python - PyQt + OpenCV로 동영상 파일 재생하기 (4) | 2021.10.18 |
---|---|
Python - Scene Detector 만들기 첫단계 OpenCV 설치하기 (0) | 2021.04.17 |
Python UTF-8 파일 처리 중 BOM 출력 오류 해결 (0) | 2021.02.22 |
특정 문자열을 찾아 텍스트 분할하는 어플 - Blice Text Splitter (2) | 2021.02.15 |
Pycharm에서 Github에 Repository생성, 소스 업로드하기 (0) | 2021.02.10 |
댓글