[Python GoogleDrive] Google Driveからログファイルを ダウンロード/展開/削除 する

これはなに?

以下のnoteでアップロードしたログファイルをローカルに落としたり、展開したりするだけのスクリプト


確認環境

Mac で動作確認
※websocket-clientは0.49以降だとうまく受信できないかもしれないので注意

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14
BuildVersion:	18A391

$ python --version
Python 3.6.2 :: Anaconda, Inc.

$ pip --version
pypip 18.0

$ pip show websocket-client PyDrive google-api-python-client
Name: websocket-client
Version: 0.48.0

Name: PyDrive
Version: 1.3.1

Name: google-api-python-client
Version: 1.7.4


コード

適当です

# -*- Coding: utf-8 -*-
import pathlib
import zipfile
from zipfile import ZIP_DEFLATED, ZIP_BZIP2, ZIP_LZMA
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

# Google Drive からファイルを削除するか
TRASH_GDRIVE_FILE = False
DELETE_GDRIVE_FILE = False
# 圧縮ファイルの展開有無
UNCOMPRESS_FILE = True
# 展開後に圧縮ファイルを削除するか
DELETE_ZIPPED_FILE = True
GDRIVE_FOLDER_ID = 'GoogleDriveFolderId'
DOWNLOAD_FOLDER = "download"
BYTE_UNITS = ["[B]", "[KB]", "[MB]", "[GB]"]

def readableSize(size):
  for i, unit in enumerate(BYTE_UNITS):
    div = size / pow(1024, i)
    if div < 1024:
      return f"{round(div, 3)}{unit}"

def downloadAndDecompress():
  dlPath = pathlib.Path(f"{DOWNLOAD_FOLDER}")

  gauth = GoogleAuth()
  gauth.CommandLineAuth()
  drive = GoogleDrive(gauth)

  fileList = drive.ListFile({'q': f'\"{GDRIVE_FOLDER_ID}\" in parents and trashed=false'}).GetList()
  for f in fileList:
    fName, fSize = f["title"], int(f["fileSize"])
    # 同じ basename のファイル(展開済, pkl, etc)が既にある場合スキップ
    if len(list(dlPath.glob(f"{fName[:-4]}*"))):
      print(f"Skip {fName}")
      continue

    # ダウンロード
    dlFile = dlPath / pathlib.Path(fName)
    print(f"Download {fName} to {dlFile}, {readableSize(fSize)}")
    f.GetContentFile(dlFile)

    # ゴミ箱に移動(Google Drive)
    if TRASH_GDRIVE_FILE:
      print(f"Trash {fName}")
      f.Trash()

    # 完全削除(Google Drive)
    if DELETE_GDRIVE_FILE:
      print(f"Delete {fName}")
      f.Delete()

    # 解凍
    if UNCOMPRESS_FILE:
      print(f"Extract {dlFile}")
      with zipfile.ZipFile(dlFile) as zippedFile:
        zippedFile.extractall(dlPath)

      # 削除(LocalFile)
      if DELETE_ZIPPED_FILE:
        print(f"Delete {dlFile}")
        dlFile.unlink()

if __name__ == "__main__":
  downloadAndDecompress()


動作について

この辺を好きに設定してください。TRASHはゴミ箱への移動、DELETEは完全削除

# Google Drive からファイルを削除するか
TRASH_GDRIVE_FILE = False
DELETE_GDRIVE_FILE = False
# 圧縮ファイルの展開有無
UNCOMPRESS_FILE = True
# 展開後に圧縮ファイルを削除するか
DELETE_ZIPPED_FILE = True
GDRIVE_FOLDER_ID = 'GoogleDriveFolderId'
DOWNLOAD_FOLDER = "download"


参考サイト

↓と同じなので省略


おわりに

有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。


マガジン


コメント用note(未購入者向け)


干し芋


ここから先は

0字

¥ 100

サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM