如何使用 Google Drive API 识别和删除大型 Google Takeout ZIP 文件?

问题描述 投票:0回答:1

如何使用 Google Drive API 识别和删除大型 Google Takeout ZIP 文件?

身体: 我遇到一个问题:Google Takeout 不断在我的 Google 云端硬盘中创建大型 ZIP 文件,导致其达到存储限制。我需要使用 Google Drive API 以编程方式识别和删除这些文件。

我注意到文件名遵循类似 takeout-YYYYMMDDTHHMMSSZ-###.zip 的模式,我想:

列出我的 Google 云端硬盘中的所有文件。 识别与模式 takeout-*.zip 匹配的文件。 删除已识别的文件以释放空间。 这是我到目前为止所做的:

我已经设置了一个 Google Cloud 项目并启用了 Google Drive API。 我有服务帐户凭据并且可以通过 API 进行身份验证。 有人可以提供执行上述步骤的 Python 示例脚本吗?任何有关有效处理大量文件的其他提示也将不胜感激。

我有: Python 复制代码

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Define the scope
SCOPES = ['https://www.googleapis.com/auth/drive']

# Provide the path to your service account key file
SERVICE_ACCOUNT_FILE = 'path/to/service_account.json'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# Create the Drive API service
service = build('drive', 'v3', credentials=credentials)

# List all files
results = service.files().list(
    pageSize=1000, fields="nextPageToken, files(id, name, size, modifiedTime)").execute()
items = results.get('files', [])

if not items:
    print('No files found.')
else:
    print('Files:')
    for item in items:
        print(f'{item["name"]} ({item["id"]}) - {item["modifiedTime"]} - {item["size"]}')

# Optionally, delete old files based on a condition
for item in items:
    if 'takeout' in item['name']:
        # Add your condition to delete older files
        service.files().delete(fileId=item['id']).execute()
        print(f'Deleted {item["name"]}')

问题:
如何修改此脚本以有效识别并仅删除 takeout-*.zip 文件?
处理大量文件时我应该考虑哪些优化或最佳实践?

google-chrome python zip
1个回答
0
投票

您可以使用Simple Drive套件来解决这个问题。

pip 安装简单驱动器

from simple_drive import Auth, Drive, SearchTerms

auth = Auth.from_service_account_file(file='service_account.json')

drive = Drive(auth, verbose=True)

files = drive.Files.list(SearchTerms.name_contains('takeout-'))


# Use Pandas to review files and filter more details by your self.
# import pandas as pd
# df = pd.DataFrame(files)

for file in files:
    drive.Files.delete(file_id=file['id'])

希望这可以帮助你!

© www.soinside.com 2019 - 2024. All rights reserved.