【发布时间】:2021-06-16 17:38:25
【问题描述】:
我需要使用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 传递?
【问题讨论】:
-
您是否尝试在
2021中创建文件夹2021、下一个文件夹06等? Google 驱动器不必使用与本地系统相同的规则。它可能会将/视为普通字符,而不是分隔符。 -
迭代每个文件夹可以解决嵌套结构的问题,但它会导致一个新问题,因为它每次运行命令时都会创建一个新文件夹。
-
那么首先你必须检查文件夹是否存在——这很正常——在正常的文件系统中,你还需要先检查文件夹是否存在,然后再尝试创建它,因为它可能会引发错误。在 Linux 中,如果您尝试再次创建新文件夹,则会出现错误。在 python 标准
os.makdirs()中,当文件夹存在时会引发错误,您必须检查os.path.exists()是否存在。在 web 驱动程序中甚至更糟糕,因为它们可能有两个同名的文件夹,因为它们使用 ID 来识别文件夹。
标签: python google-api google-drive-api