Tex, python, illusrator, VPSの学生ノート

latotex-blog

Python

【Windowsユーザー】zip解凍・削除の処理もPythonに任せよう

投稿日:2020年6月14日 更新日:







Zip形式は送る方にとっては便利ですが、受け取る方は解凍や削除の処理が面倒くさいですよね。(特に複数Zipファイルが送られてきたときは!)
私も受講する予定の講義のシラバス(PDF形式)をダウンロードするのですが、
システムの問題なのか、ダウンロードするとご丁寧に1つずつZIP形式にして送られてきます・・
大した数ではないのですがやはり面倒くさいのでPythonに任せることにしました。
Jupyter Notebook + windows10で作業しています。

スポンサーリンク

Pythonコード

ベースとしては、こちらのサイト様のコードを採用させていただきました。

https://life-freedom888.com/pandas-zip/

#!/usr/bin/env python3

#必要なものを宣言
import os
from zipfile import ZipFile
import glob

#ZIPをダウンロードした場所
folder0 = r"C:\Users\user\Downloads"

#解凍した中身を入れるフォルダー
#すでにあるフォルダーと被らないような名前を設定してください
#この例では「C:\Users\user\Downloads\box」というフォルダーを設定しています。
folder1 = folder0 + "\\box"

#folder0まで移動
os.chdir(folder0)

#folder1をつくる
os.makedirs(folder1, exist_ok=True)

#folder0の中にあるzip形式のファイルの一覧を取得
zip_files = glob.glob("*.zip")

#Zipファイルの解凍
for file in zip_files:
    with ZipFile(file) as zp:
        zp.extractall(folder1)

    #解凍したファイルを削除
    os.remove(file)

注意してほしいこと

ポイントはファイルのパス指定とファイル作成です!

folder0 = r"C:\Users\user\Downloads"
folder1 = folder0 + "\\box"
os.makedirs(folder1, exist_ok=True)

folder0にある「r」は地味に重要です。これをつけないと(unicode error)が発生してしまいます。なぜなら、pythonにおける「/」は他の意味に捉えられてしまうからです。(ex.文字列中で/nをつかうとprintしたときに/nの後の文章が改行されてしまうなど)folder1にある「\\」も「r」と同じです。windowsのパスを指定する際は「\\」か「r」を使いましょう。

os.makedirs(folder1, exist_ok=True)はエラー対策用と言ってもいいかもしれません。exist_ok=Trueは、すでに同じファイル名があったときも新しいフォルダーを作るという命令です。os.makedirsはデフォルトでは既に存在するフォルダー名を指定することができないので、exist_ok=Trueを指定することでエラーを直して再度実行したとき、「フォルダーは既に存在しています」というエラーを避けることができます!
folder1のコメントアウトに「すでにあるフォルダーと被らないような名前を設定してください」と書いたのは既にあるフォルダーに上書きされてしまうのを防ぐためです。

スポンサーリンク

参考にしたサイト様

os.makedirsについて
https://note.nkmk.me/python-os-mkdir-makedirs/

なぜwindowsのファイル名のパスにrをつける必要があるのか

https://ja.stackoverflow.com/questions/11582/

globってなに?
https://techacademy.jp/magazine/18928

-Python

Copyright© latotex-blog , 2020 All Rights Reserved Powered by STINGER.