在我使用 Python 中的 Google Drive API 获得的文件列表中,我想知道如何确定条目是文件还是文件夹。
我列出了我的 Google Drive 上的所有文件,这些文件与 python 中的服务帐户共享:
service = get_service(
api_name='drive',
api_version='v3',
scopes=[scope],
key_file_location=key_file_location)
# Call the Drive v3 API
results = service.files().list(
pageSize=1000, fields="nextPageToken, files(kind, id, name, size, parents, sha256Checksum, version, modifiedTime)").execute()
items = results.get('files', [])
这行得通,但是在文档中我找不到一个干净的方法来确定一个条目是一个文件还是一个“文件夹”。我注意到文件夹没有大小,例如没有 sha256Checksum 但可能有其他对象没有这些。
确定结果列表中的条目是文件还是“文件夹”的正确方法是什么?
我相信你的目标如下。
items
的值,您想将值分离到文件和文件夹。在这种情况下,使用
mimeType
怎么样? Google Drive 上文件夹的 mimeType 是application/vnd.google-apps.folder
。我认为这可能可以用于实现您的目标。当这反映在你的脚本中时,它变成如下。
results = service.files().list(
pageSize=1000, fields="nextPageToken, files(kind, id, name, size, parents, sha256Checksum, version, modifiedTime)").execute()
items = results.get('files', [])
results = service.files().list(pageSize=1000, fields="nextPageToken, files(kind, id, name, size, parents, sha256Checksum, version, modifiedTime, mimeType)").execute()
items = results.get("files", [])
obj = {"files": [], "folders": []}
for e in items:
if e["mimeType"] == "application/vnd.google-apps.folder":
obj["folders"].append(e)
else:
obj["files"].append(e)
print(obj)
当这个脚本运行时,
obj
是{"files": [,,,], "folders": [,,,]}
。这样,检索到的值可以分成文件和文件夹。
如果你只想检索文件夹,我认为在这种情况下,可以使用如下搜索查询。
results = service.files().list(pageSize=1000, fields="nextPageToken, files(kind, id, name, size, parents, sha256Checksum, version, modifiedTime, mimeType)", q="mimeType='application/vnd.google-apps.folder' and trashed=false").execute()
items = results.get("files", [])
print(items)
而且,如果您只想检索文件夹以外的文件,我也认为在这种情况下,可以按如下方式使用搜索查询。
results = service.files().list(pageSize=1000, fields="nextPageToken, files(kind, id, name, size, parents, sha256Checksum, version, modifiedTime, mimeType)", q="mimeType!='application/vnd.google-apps.folder' and trashed=false").execute()
items = results.get("files", [])
print(items)