실습/python
[zipfile] python 3.x 한글 압축 파일 풀기
gldmg
2019. 6. 18. 16:36
zipfile을 이용하면 zip 파일의 압축을 해제할 수 있다.
파일이 한글일 경우 깨짐 현상이 발생하는데,
구글링하면 이를 해결한 글을 찾을 수 있다.
http://www.hanbit.co.kr/media/channel/view.html?cms_code=CMS8947142043
그런데 python 2.x만 가능하고, python 3.x에는 적용되지 않는다.
python 3.x 관련글을 찾으려 했으나, 아무런 포스팅이 없다.
그래서 이래저래 찾아본 결과 해결책을 찾을 수 있었다.
결과적으로
기존 member.filename = member.filename.decode("euc-kr").encode("utf-8")를
member.filename.encode('cp437').decode('euc-kr')로 변경하면 된다.
풀 코드는 아래처럼 쓰면 된다.
(참고로 이전 글의 함수에서 dest_path 기능이 없길래 추가했다.)
def unzip(source_file, dest_path):
with zipfile.ZipFile(source_file, 'r') as zf:
zipInfo = zf.infolist()
for member in zipInfo:
try:
print(member.filename.encode('cp437').decode('euc-kr', 'ignore'))
member.filename = member.filename.encode('cp437').decode('euc-kr', 'ignore')
zf.extract(member, dest_path)
except:
print(source_file)
raise Exception('what?!')
하지만 euc-kr로 표현되지 않는 파일명은 여전히 깨지긴한다.