압축 풀기(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
일상블로그 같은 개발블로그

4개의 댓글

comment-user-thumbnail
2020년 2월 14일

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

1개의 답글

The appeal of Call Girl in Delhi is not only in their appearance but also in their charming personalities. They are great conversationalists who can engage clients on different topics, which makes the experience even better.

답글 달기