使用PyDrive(Python)访问文件夹,子文件夹和子文件

Yel*_*our 6 python metadata python-2.7 google-api-python-client

我从PyDrive文档中获得以下代码,允许访问我的Google云端硬盘中的顶级文件夹.我想从中访问所有文件夹,子文件夹和文件.我该怎么做呢(我刚刚开始使用PyDrive)?

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive


gauth = GoogleAuth()
gauth.LocalWebserverAuth() # Creates local webserver and auto handles authentication

#Make GoogleDrive instance with Authenticated GoogleAuth instance
drive = GoogleDrive(gauth)

#Google_Drive_Tree = 
# Auto-iterate through all files that matches this query
top_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file in top_list:
    print 'title: %s, id: %s' % (file['title'], file['id'])
    print "---------------------------------------------"

#Paginate file lists by specifying number of max results
for file_list in drive.ListFile({'q': 'trashed=true', 'maxResults': 10}):
    print 'Received %s files from Files.list()' % len(file_list) # <= 10
    for file1 in file_list:
        print 'title: %s, id: %s' % (file1['title'], file1['id'])
Run Code Online (Sandbox Code Playgroud)

我已经检查了以下页面如何列出Google驱动器文件夹的所有文件,文件夹,子文件夹和子文件,这似乎是我正在寻找的答案,但代码不再存在了.

Shi*_*dra 6

你的代码是绝对正确的。但是使用 Pydrive 的默认设置,您只能访问根级别的文件和文件夹。更改 settings.yaml 文件中的 oauth_scope 可修复此问题。

client_config_backend: settings
client_config:
client_id: XXX
client_secret: XXXX

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True

oauth_scope:
  - https://www.googleapis.com/auth/drive
  - https://www.googleapis.com/auth/drive.metadata
Run Code Online (Sandbox Code Playgroud)

  • 更改“oauth_scope”后,我必须删除“credentials.json”,创建一个空的新“credentials.json”文件,并再次对应用程序进行身份验证才能访问新范围。 (2认同)

小智 5

它需要迭代文件列表。基于,代码将在文件夹中获取文件标题和每个文件的url链接。可通过提供文件夹的来调整代码以获取特定的文件id夹,例如ListFolder('id')。下面给出的示例正在查询root

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth() # Creates local webserver and auto handles authentication

#Make GoogleDrive instance with Authenticated GoogleAuth instance
drive = GoogleDrive(gauth)

def ListFolder(parent):
  filelist=[]
  file_list = drive.ListFile({'q': "'%s' in parents and trashed=false" % parent}).GetList()
  for f in file_list:
    if f['mimeType']=='application/vnd.google-apps.folder': # if folder
        filelist.append({"id":f['id'],"title":f['title'],"list":ListFolder(f['id'])})
    else:
        filelist.append({"title":f['title'],"title1":f['alternateLink']})
  return filelist

ListFolder('root')
Run Code Online (Sandbox Code Playgroud)

  • 尽管这可能还需要一些速率限制 (2认同)