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로 표현되지 않는 파일명은 여전히 깨지긴한다.
'실습 > python' 카테고리의 다른 글
멀티프로세싱 및 진행 사항 확인 (0) | 2019.02.26 |
---|---|
알면 좋은 개념 및 유용한 기본 모듈/함수들 (0) | 2019.01.27 |
visual studio code (VS Code)에서 Anaconda 사용 (0) | 2018.10.16 |
[pycharm] 외부로 코드 복사하기 (0) | 2018.10.13 |
python2 버전 코드를 python3 버전 코드로 바꾸기 (0) | 2018.08.23 |