압축 풀기(unzip) 파이썬으로 자동화하기

눈치볼나이·2020년 2월 13일
1

1. 개요

해야할 작업은 아래 1번 구조의 폴더를 압축을 풀어 2번 구조의 형태로 만들어야 하는 작업이었습니다.


1. 현재 구조

  • 타겟 파일(.zip)
    • 1번 폴더
      • 1번 zip 파일
        • 1.py
        • 2.py
        • 3.py ...
    • 2번 폴더
      • 2번 zip 파일
    • 3번 폴더 ...

2. 결과 구조

  • 결과 폴더
    • 1번 폴더
      • 1.py
      • 2.py
      • 3.py ...
    • 2번 폴더
      • 1.py
      • 2.py ...
    • 3번 폴더 ...

폴더마다 압축파일이 존재해서 일일이 압축을 풀고 파일을 옮겨야 하는 반복 작업이 필요했습니다. 그래서 파이썬으로 자동화하려고 마음먹었습니다.

2. 필요한 외장 모듈

경로를 다루기 위한 모듈, os

  • os.getcwd : 현재 경로를 리턴합니다.
  • os.path.join : 인자를 조합해 각 os에 맞는 경로를 리턴합니다.
  • os.chdir : 인자로 주어진 경로로 이동합니다.
  • os.listdir : 현재 경로의 모든 항목을 리턴합니다.
  • os.remove : 해당 파일을 삭제합니다.

명령어의 인자를 가져오기 위한 모듈, sys

$ python unzip_files.py target_file.zip
  • sys.argv : python 명령어의 인자들을 리스트로 갖습니다.
  • 위의 명령어에서 sys.argv['unzip_files.py', 'target_file.zip']과 같은 값을 갖게 됩니다.

압축을 풀기 위한 모듈, zipfile

with zipfile.ZipFile(target_file) as unzip:
    unzip.extractall(result_dir)
  • target_file이 .zip 파일이고, result_dir은 압축이 풀린 결과가 담길 디렉토리입니다.

디렉토리와 관련된 모듈, shutil

shell util의 줄임말인듯 합니다. 그래서 그런지 사용법 또한 쉘 스크립트와 비슷하네요.

  • shutil.move(src, des) : 첫 번째 인자의 파일을 des로 이동합니다.
  • shutil.rmtree : 디렉토리를 삭제합니다.

3. 후기

각 모듈의 사용법만 숙지한다면 만들기 어려운 작업은 아닙니다. 처음 작성할 당시 거의 모든 모듈의 사용법을 찾아가며 작업했는데도 1시간 정도 걸려 코드를 완성한 듯 합니다. 그냥 노가다로 작업했다면 5~10분만에 다 했겠지만, 많은 분들이 같은 작업을 해야했고, 앞으로도 자주 이 작업을 해야 하기 때문에, 자동화작업이 충분히 가치 있다고 판단하였습니다. 나중에 동료분들께서 고맙다고 해 주는데 기분이 좋았습니다.
처음엔 osx에서만 동작하도록 작성했는데, os.path.join을 가미해서 windows에서도 동작하도록 수정하면서 리팩토링과 포스팅을 하기로 마음먹었습니다. 혹시 필요하실 분들의 도움이 되기를 바랍니다.

profile
일상블로그 같은 개발블로그

3개의 댓글

comment-user-thumbnail
2020년 2월 14일

지나가다가 들렸어요~번창하세요♡

1개의 답글