如何使用Google Drive api删除400000个空文件

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

不知何故,我得到了 400000 个空文件,其中包含“scripts100..”。所有这些文件都在根驱动器中,我需要通过 google Api 使用 python 脚本删除那些文件。谷歌支持告诉我选择所有文件然后删除,但这是不可能的,除了不幸之外,谷歌没有提供任何有意义的支持。

我不是程序员,但我搜索过,在我看来唯一的选择就是获取 python 脚本

我通过谷歌驱动器API管理连接到我的谷歌驱动器,通过下面的脚本删除文件我使用了caht Gpt,但它很慢,总是达到最大时间

from Google import Create_Service

CLIENT_SECRET_FILE = "client_secret.json"
API_NAME = "drive"
API_VERSION = "v3"
SCOPES = ["https://www.googleapis.com/auth/drive"]


service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)

def list_files():
    try:
        results = service.files().list(fields="nextPageToken, files(id, name)").execute()
        files = results.get('files', [])

        return files
    except Exception as e:
        print("An error occurred:", e)
        return []

def delete_file(file_id):
    try:
        service.files().delete(fileId=file_id).execute()
        print(f"File with ID {file_id} deleted successfully.")
    except Exception as e:
        print(f"An error occurred while deleting file with ID {file_id}:", e)

# Get a list of all files
files = list_files()

# Delete each file
for file in files:
    delete_file(file['id'])

有没有其他方法或更好的选择来解决这个问题。我将感谢您的帮助

我需要修复谷歌驱动器

file google-drive-api
1个回答
0
投票

如果您用于删除 Google Drive 文件的脚本由于单独处理每个文件而达到了最长执行时间,您可以通过使用批量请求来优化您的方法。此方法允许您在单个 HTTP 请求中发送多个删除命令,从而减少处理大量文件所需的时间。

通过以下方式安装此要求:

pip install --upgrade google-api-python-client google-auth google-auth-oauthlib google-auth-httplib2

这是一个实现批量请求的脚本:

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.http import BatchHttpRequest

SCOPES = ['https://www.googleapis.com/auth/drive']

def callback(request_id, response, exception):
    if exception:
        print(f"An error occurred: {exception}")
    else:
        print(f"Deleted file ID: {request_id}")

def main():
    flow = InstalledAppFlow.from_client_secrets_file('path_to_credentials.json', SCOPES)
    creds = flow.run_local_server(port=0)
    service = build('drive', 'v3', credentials=creds)

    results = service.files().list(pageSize=100, fields="nextPageToken, files(id)").execute()
    items = results.get('files', [])

    if not items:
        print('No files found.')
    else:
        batch = service.new_batch_http_request(callback=callback)
        for item in items:
            batch.add(service.files().delete(fileId=item['id']))
        batch.execute()

if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.