Google 驱动器 API:"contains" 不匹配 files().list(q="name contains 'SMITH'") 中间的字符串?
Google Drive API: "contains" does not match string in middle in files().list(q="name contains 'SMITH'")?
我有一个名为 SMITH_JOHN TAYLER_DAVID
的文件夹,我只能搜索 SMITH
或 TAYLER
而不能搜索任何其他方式,即:
files().list(q="name contains 'SMITH'") => OK
files().list(q="name contains 'TAYLER'") => OK
files().list(q="name contains 'JOHN'") => No match!
files().list(q="name contains 'DAVID'") => No match!
files().list(q="name contains 'MITH'") => No match!
看起来我只能从文件夹名称的开头或 space 之后搜索单词。这也发生在你身上吗? “包含”在 REST API 中是什么意思,Python 是如何实现的(可能使用“匹配”而不是“搜索”)?
So looks like that I can only search word from the beginning of the folder name or after a space. This happens to you as well?
在我的环境中,我确认了与您相同的情况。在您的情况下,文件夹名称是 SMITH_JOHN TAYLER_DAVID
。我认为在这种情况下,_
可能是导致此问题的原因。例如,当文件夹名称为 SMITH JOHN TAYLER DAVID
时,您的所有搜索查询都可以检索到该文件夹。好像可以搜索到最上面的字母和一个space后面的字母。我认为这可能是当前的规范。
What does "contains" mean in the REST API and how does the Python implemented this (perhaps using "match" instead of "search")?
这用作搜索查询。 Ref 此搜索查询用于“文件:列表”的方法。
例如,如果您想通过搜索 'SMITH','TAYLER','JOHN','DAVID','MITH'
的值而不是 name='SMITH_JOHN TAYLER_DAVID'
的搜索查询来检索文件夹名称 SMITH_JOHN TAYLER_DAVID
的文件夹,您可以使用以下流程。
- 使用
name contains 'SMITH' and mimeType='application/vnd.google-apps.folder' and trashed=false
的搜索查询检索文件夹列表。
- 这样,文件夹列表包括
SMITH
。
- 通过从检索到的文件夹列表中搜索
'SMITH','TAYLER','JOHN','DAVID','MITH'
的值来检索文件夹。
通过这个流程,SMITH_JOHN TAYLER_DAVID
的文件夹可以通过一次API调用来检索。当此流程反映在使用 googleapis for python 的示例脚本中时,它变成如下。
示例脚本:
drive_service = build('drive', 'v3', credentials=creds) # Please use your credential.
q = "name contains 'SMITH' and mimeType='application/vnd.google-apps.folder' and trashed=false"
response = drive_service.files().list(q=q, fields='files(id, name)', pageSize=1000).execute()
search = ['TAYLER', 'JOHN', 'DAVID', 'MITH']
for file in response.get('files'):
name = file.get('name')
if all(e for e in search if e in name):
print(name)
当此脚本为运行时,可以获得SMITH_JOHN TAYLER_DAVID
的文件夹
本例假设包含SMITH
值的文件夹数小于1000,请注意
参考文献:
我有一个名为 SMITH_JOHN TAYLER_DAVID
的文件夹,我只能搜索 SMITH
或 TAYLER
而不能搜索任何其他方式,即:
files().list(q="name contains 'SMITH'") => OK
files().list(q="name contains 'TAYLER'") => OK
files().list(q="name contains 'JOHN'") => No match!
files().list(q="name contains 'DAVID'") => No match!
files().list(q="name contains 'MITH'") => No match!
看起来我只能从文件夹名称的开头或 space 之后搜索单词。这也发生在你身上吗? “包含”在 REST API 中是什么意思,Python 是如何实现的(可能使用“匹配”而不是“搜索”)?
So looks like that I can only search word from the beginning of the folder name or after a space. This happens to you as well?
在我的环境中,我确认了与您相同的情况。在您的情况下,文件夹名称是 SMITH_JOHN TAYLER_DAVID
。我认为在这种情况下,_
可能是导致此问题的原因。例如,当文件夹名称为 SMITH JOHN TAYLER DAVID
时,您的所有搜索查询都可以检索到该文件夹。好像可以搜索到最上面的字母和一个space后面的字母。我认为这可能是当前的规范。
What does "contains" mean in the REST API and how does the Python implemented this (perhaps using "match" instead of "search")?
这用作搜索查询。 Ref 此搜索查询用于“文件:列表”的方法。
例如,如果您想通过搜索 'SMITH','TAYLER','JOHN','DAVID','MITH'
的值而不是 name='SMITH_JOHN TAYLER_DAVID'
的搜索查询来检索文件夹名称 SMITH_JOHN TAYLER_DAVID
的文件夹,您可以使用以下流程。
- 使用
name contains 'SMITH' and mimeType='application/vnd.google-apps.folder' and trashed=false
的搜索查询检索文件夹列表。- 这样,文件夹列表包括
SMITH
。
- 这样,文件夹列表包括
- 通过从检索到的文件夹列表中搜索
'SMITH','TAYLER','JOHN','DAVID','MITH'
的值来检索文件夹。
通过这个流程,SMITH_JOHN TAYLER_DAVID
的文件夹可以通过一次API调用来检索。当此流程反映在使用 googleapis for python 的示例脚本中时,它变成如下。
示例脚本:
drive_service = build('drive', 'v3', credentials=creds) # Please use your credential.
q = "name contains 'SMITH' and mimeType='application/vnd.google-apps.folder' and trashed=false"
response = drive_service.files().list(q=q, fields='files(id, name)', pageSize=1000).execute()
search = ['TAYLER', 'JOHN', 'DAVID', 'MITH']
for file in response.get('files'):
name = file.get('name')
if all(e for e in search if e in name):
print(name)
当此脚本为运行时,可以获得
SMITH_JOHN TAYLER_DAVID
的文件夹本例假设包含
SMITH
值的文件夹数小于1000,请注意