JavaScriptを有効にしてください

Google ColabでGoogle Driveのゴミ箱内のファイルを削除する

 ·  ☕ 4 分で読めます

Google ColabでGoogle Driveのゴミ箱内のファイルを削除する

Google Driveを利用していると、不要になったファイルをゴミ箱に移動することがよくあります。しかし、ゴミ箱の中にはファイルがどんどん溜まってしまい、いずれ管理が面倒になることがあります。そこで今回は、Google Colabを使って、Google Driveのゴミ箱内のファイルを一括削除できるコードを紹介します。

このコードは、Google Drive APIを使用し、ゴミ箱内のすべてのファイルをリスト化して、削除する機能を持っています。また、削除するファイルの名前やパスを表示することで、どのファイルが削除されたかを確認できるようにしています。

コードの説明

以下に紹介するコードは、Google Colab上でGoogle Drive APIを利用し、ゴミ箱にあるファイルを一覧取得し、順番に削除していきます。また、ファイルの削除状況を確認するために進捗バーを表示し、どのファイルが削除されたかをコンソールに出力します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# @title GoogleDriveゴミ箱削除
from googleapiclient.discovery import build
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google.colab import auth
from google.auth import default
from tqdm import tqdm
import time

def authenticate():
    """ユーザーを認証し、Google Drive APIのサービスを構築する"""
    auth.authenticate_user()  # Colab特有の認証プロセス
    creds, _ = default()  # デフォルトの認証情報を取得
    return build('drive', 'v3', credentials=creds)

def list_all_trashed_files(service):
    """ゴミ箱内のすべてのファイルを古い順にリスト化"""
    items = []
    page_token = None
    query = "trashed=true"
    fields = "nextPageToken, files(id, name, parents, createdTime)"
    
    # ページネーションを処理しつつ、すべての削除対象ファイルをリスト化
    while True:
        results = service.files().list(q=query, orderBy="createdTime", fields=fields, pageToken=page_token).execute()
        items.extend(results.get('files', []))
        page_token = results.get('nextPageToken', None)
        if not page_token:
            break

    return items

def get_full_file_path(service, file_id):
    """ファイルIDからファイルパスを取得する"""
    try:
        path_elements = []
        current_file = service.files().get(fileId=file_id, fields='id, name, parents').execute()

        # 親フォルダをたどりながらパスを生成
        while 'parents' in current_file:
            parent_id = current_file['parents'][0]
            current_file = service.files().get(fileId=parent_id, fields='id, name, parents').execute()
            path_elements.insert(0, current_file['name'])

        path_elements.append(current_file['name'])
        return '/' + '/'.join(path_elements)
    except Exception as e:
        return f"パス取得失敗: {str(e)}"

def delete_file(service, file):
    """単一のファイルを削除し、結果を表示"""
    try:
        file_path = get_full_file_path(service, file['id'])
        service.files().delete(fileId=file['id']).execute()
        print(f"削除: {file['name']} (ID: {file['id']}) - パス: {file_path}")
    except Exception as e:
        print(f"削除失敗: {file['name']} (ID: {file['id']}) - エラー: {str(e)}")

def empty_trash(service):
    """ゴミ箱内のファイルを削除し、進捗を表示"""
    items = list_all_trashed_files(service)

    if not items:
        print("ゴミ箱に削除対象ファイルはありません。")
        return

    total_items = len(items)
    print(f"削除対象の総ファイル数: {total_items}")

    # tqdmで進捗表示
    with tqdm(total=total_items, desc="ファイル削除中", unit="file") as pbar:
        for file in items:
            delete_file(service, file)
            pbar.update(1)

# メイン処理
if __name__ == '__main__':
    service = authenticate()
    empty_trash(service)

コードのポイント

  1. 認証のセットアップ (authenticate関数)
    Google Colab環境で認証を行い、Google Drive APIにアクセスできるようにします。default()を使って、認証情報を自動的に取得します。このプロセスは、Google Colab上で行う特有の方法です。

  2. ゴミ箱内のファイル一覧取得 (list_all_trashed_files関数)
    files().list メソッドを利用して、ゴミ箱内にあるすべてのファイルを取得します。取得したファイルは古い順にソートされます。

  3. ファイルパスの取得 (get_full_file_path関数)
    削除されるファイルのパスを取得します。ファイルの親フォルダをたどりながら、完全なファイルパスを構築します。

  4. ファイル削除 (delete_file関数)
    Google Driveからファイルを削除し、その結果をコンソールに出力します。削除されたファイルの名前、ID、およびパスを表示します。

  5. ゴミ箱内のすべてのファイルを削除 (empty_trash関数)
    ゴミ箱内のファイルをすべて削除します。tqdm を使って、削除処理の進捗が視覚的に確認できるようにしています。

まとめ

このスクリプトを使用することで、Google Colab上でGoogle Driveのゴミ箱内のファイルを簡単に一括削除することができます。特に、大量のファイルがゴミ箱に溜まっている場合には、効率的に作業を進めることができるため非常に便利です。

Google Drive APIを使った自動化の良い例として、ぜひGoogle Colabを使って試してみてください。

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer