[英]Create folders in google drive with rest api interface and python requests
[英]Create nested folders with Google Drive API
我需要使用Google Drive api以YYYY/MM/DD/HH/mm/file
格式在 Google Drive 上的嵌套文件夹中添加一个新文件,其中日期是根据当前日期动态创建的。 例如:
2021/06/16/11/30/my_file.csv
我在 Python 中创建了以下脚本,但它正在创建一个文件夹(名为“2021/06/16/11/30”)而不是所需的嵌套结构(名为“06”、“11”和“30”的多个嵌套文件夹) ") 在父文件夹 "2021" 中:
from googleapiclient.discovery import build
import google.auth
from googleapiclient.http import MediaFileUpload
SCOPES = ['https://www.googleapis.com/auth/drive.metadata', 'https://www.googleapis.com/auth/drive']
credentials, project_id = google.auth.default(scopes=SCOPES)
service = build('drive', 'v3', credentials=credentials)
folder_id = 'parent-folder-id'
# Create folder
file_metadata = {
'name': '2021/06/16/11/30',
'mimeType': 'application/vnd.google-apps.folder',
'parents': [folder_id],
}
file = service.files().create(body=file_metadata, fields='id').execute()
new_folder_id = file.get('id')
print(f'Folder ID: {new_folder_id}')
# Upload file
file_metadata = {
'name': 'my_file.csv',
'parents': [new_folder_id],
}
media = MediaFileUpload('my_file.csv', mimetype='text/csv', resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(f'Folder ID: {file.get("id")}')
有没有办法在一次调用中创建这样的嵌套文件夹结构,而不是迭代每个文件夹的创建并将新文件夹 id 作为新的父 id 传递?
my_file.csv
文件上传到嵌套文件夹2021/06/16/11/30/
,需要从文件夹名称中检索文件夹 ID。 并且,当文件夹不存在时,需要创建新文件夹。service.files().list()
方法。 因为需要检查每个文件夹ID。当以上几点反映到你的脚本中时,它变成如下。
service = build('drive', 'v3', credentials=credentials)
path = '2021/06/16/11/30' # Please set the path.
folder_id = 'parent-folder-id' # Please set the top folder ID.
# Check the folder structure and create new folder if the folder is not existing.
pathList = path.split('/')
for folder in pathList:
q = "'" + folder_id + "' in parents and name='" + folder + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"
files = service.files().list(q=q).execute().get('files')
if not files:
file_metadata = {
'name': folder,
'mimeType': 'application/vnd.google-apps.folder',
'parents': [folder_id],
}
folder_id = service.files().create(
body=file_metadata, fields='id').execute().get('id')
else:
folder_id = files[0].get('id')
# Upload file
file_metadata = {
'name': 'my_file.csv',
'parents': [folder_id],
}
media = MediaFileUpload('my_file.csv', mimetype='text/csv', resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(f'Folder ID: {file.get("id")}')
path = '2021/06/16/11/30'
,当每个文件夹中都不存在该文件夹时,会创建该文件夹。 当文件夹存在于每个文件夹中时,不会创建新文件夹。 files.create API 仅创建一个文件,并且无法在一次调用中创建多个文件。 所以要回答你的问题,你需要先创建2021
,将新创建的文件夹ID设置为父级,然后迭代创建文件夹(06、16,以此类推),直到到达最底层。
样本:
folder_id = 'parent-folder-id'
date_array = ["2021", "06", "16", "11", "30"]
for x in date_array:
# Create folder
file_metadata = {
'name': x,
'mimeType': 'application/vnd.google-apps.folder',
'parents': [folder_id],
}
file = service.files().create(body=file_metadata, fields='id').execute()
new_folder_id = file.get('id')
print(f'Folder ID: {new_folder_id}')
folder_id = new_folder_id
# Upload file
file_metadata = {
'name': 'my_file.csv',
'parents': [folder_id],
}
media = MediaFileUpload('my_file.csv', mimetype='text/csv', resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(f'Folder ID: {file.get("id")}')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.