不知何故,我得到了 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'])
有没有其他方法或更好的选择来解决这个问题。我将感谢您的帮助
我需要修复谷歌驱动器
如果您用于删除 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()