我正在使用Python通过Google Drive API访问我的Google云端硬盘帐户。我只想列出名称以某个长字符串开头的文件。为此,我使用files.list
contains
子句,如this documentation中所述。我发现当搜索字符串超过26个字符时,这种方法无法正常工作。
要复制,请执行以下操作:
设置Google云端硬盘服务帐户。
在您的Google云端硬盘帐户中创建一个文件夹,并授予服务帐户访问权限。
将两个空文件上传到此文件夹,一个名为abcdefghijklmnopqrstuvwxyz1
,另一个名为abcdefghijklmnopqrstuvwxyza1
。
使用API列出文件夹中的文件,首先匹配包含abcdefghijklmnopqrstuvwxyz
的文件,然后匹配包含abcdefghijklmnopqrstuvwxyza
的文件。第一次搜索应该返回两个文件,但是第二次搜索应该返回第二个文件,而不返回任何文件。
以下是我用来测试的Python代码:
import httplib2
from oauth2client.service_account import ServiceAccountCredentials
from apiclient import discovery
SCOPES = 'https://www.googleapis.com/auth/drive'
CLIENT_SECRET_FILE = 'client_secret.json'
credentials = ServiceAccountCredentials.from_json_keyfile_name(CLIENT_SECRET_FILE, SCOPES)
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
folder = '1mkebcpZ-mIhq4dLWwePqHqwzw6kUAj1-'
prefix = 'abcdefghijklmnopqrstuvwxyz'
results = service.files().list(
fields="files(id, name)",
q="'%s' in parents and name contains '%s'" % (folder, prefix)
).execute()
print('First result:')
print(results['files'])
prefix = 'abcdefghijklmnopqrstuvwxyza'
results = service.files().list(
fields="files(id, name)",
q="'%s' in parents and name contains '%s'" % (folder, prefix)
).execute()
print('Second result:')
print(results['files'])
这是我的输出:
First result:
[{u'id': u'1Wwzym1ZVMTWzuX-K0eT0-xJrWI8t_YGN', u'name': u'abcdefghijklmnopqrstuvwxyza1'}, {u'id': u'16i4SSwYSbhV9hCFUaCwE7nrYdxBntIi_', u'name': u'abcdefghijklmnopqrstuvwxyz1'}]
Second result:
[]
为什么文件abcdefghijklmnopqrstuvwxyza1
没有出现在第二个结果中?