(python) 텍스트 파일들 인코딩 일괄변환

eojin·2020년 7월 23일
0

1분 코드 스니펫

목록 보기
1/2

tl;dr

변환해야 할 SQL 파일들이 모여 있는 디렉토리에 이 스크립트를 집어넣고 실행한다.

from os import listdir
from os.path import isfile, join

sqlpath = './' # 다른 디렉토리에 이 스크립트를 넣을거면 이거 수정해서 사용
encoding_in = 'euckr'
encoding_out = 'utf-8-sig'

onlyfiles = [f for f in listdir(sqlpath) if isfile(join(sqlpath, f)) and '.sql' in f]

for f in onlyfiles :
    try :
        s = open(f, mode = 'r', encoding = encoding_in).read()
        print(s)
        open(f, mode = 'w', encoding = encoding_out).write(s)
        # break # 1개만 테스트해 보고 싶으면 주석 해제하고 실행
    except :
        print(f + ' has been maybe re-encoded already. passed.')

사연

DBeaver 인스톨버전이 7.1.3부터 내 컴퓨터에서 crash on startup 현상을 보였다. 무슨 자바 라이브러리를 못찾겠단다. 아니 지금까지 잘만 찾아 쓰던걸 외 이제와서 몾찼는데? 성질나서 Windows Store 버전으로 교체했다.

그랬더니 그간 저장해놓은 sql 파일들이 모조리 인코딩이 깨지는 거다.

그렇지.. 한국어 윈도에서는 텍스트 파일을 utf8bom으로 저장해야 제대로 보인다.
DBeaver 인스톨버전의 인코딩은 EUC-KR이었고..

아 이거 어떡하지.. 한국어 주석 다 매우 중요해서 살려야 하는데... 이런 파일이 족히 몇십 개가 넘는걸 언제 다 변환한담... 물론 VS Code 로 Reopen with encoding 과 Save with encoding 기능을 쓰면 되겠지만.. 어휴...

혹시나? 싶어서 파이썬 스크립트를 짜보았다.

윈도에서 VS Code를 깔면 파이썬이 기본으로 딸려 온다. (아닌가? 처음 실행할 때 파이썬을 깔라고 강력 권고 닦달했던 것 같다.) 그때 깔아주는 기본 파이썬에 os 모듈은 있으니까, 그것만 딱 사용하기로 한다.
코드는 뭐 별거 없다. 특정 디렉토리를 한바퀴 빙 돌면서, 파일을 통째로 읽어다가 인코딩만 갈아서 그대로 다시 엎어치는 매우 단순한 작업이다. 사실상 내가 VS Code 에디터 가지고 하려고 했던 노가다를 그냥 코드로 구현해 놓은 것뿐인데, 그간 주워들은 파이썬 풍월과 스택오버플로의 힘을 빌어 대충 짰다.

몇번 불안한 테스트와 단순 무식한 백업을 받은 뒤... 1번 스크립트를 돌렸고... 와! 빨래 끝! 생각보다 잘되네!! 파이썬 아주 모르고 살았으면 손해볼 뻔했네!!!

교훈

  • 뭐든 아는 것이 힘이다. 특히 코더라면 더욱더
  • Windows Store에 있는 앱이라면 Windows Store 버전으로 쓰자.
profile
신입 PHP 개발자입니다.

0개의 댓글