1

我有一个名为 的文件夹SMITH_JOHN TAYLER_DAVID,我只能搜索SMITHTAYLER不能以任何其他方式搜索,即:

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!

所以看起来我只能从文件夹名称的开头或空格之后搜索单词。这也发生在你身上?REST API 中的“包含”是什么意思,Python 是如何实现的(可能使用“匹配”而不是“搜索”)?

4

1 回答 1

1

所以看起来我只能从文件夹名称的开头或空格之后搜索单词。这也发生在你身上?

在我的环境中,我和你确认了同样的情况。在您的情况下,文件夹名称是SMITH_JOHN TAYLER_DAVID. 我认为在这种情况下,_可能是这个问题的原因。例如,当文件夹名称为 时SMITH JOHN TAYLER DAVID,您的所有搜索查询都可以检索到该文件夹​​。似乎可以搜索顶部字母和空格后的字母。我认为这可能是当前的规范。

REST API 中的“包含”是什么意思,Python 是如何实现的(可能使用“匹配”而不是“搜索”)?

这用作搜索查询。Ref此搜索查询用于“文件:列表”的方法。

例如,如果您想SMITH_JOHN TAYLER_DAVID通过搜索 的值'SMITH','TAYLER','JOHN','DAVID','MITH'而不是 的搜索查询来检索文件夹名称的文件夹,则name='SMITH_JOHN TAYLER_DAVID'可以使用以下流程。

  1. 使用 的搜索查询检索文件夹列表name contains 'SMITH' and mimeType='application/vnd.google-apps.folder' and trashed=false
    • 这样,文件夹列表包括SMITH.
  2. 通过从检索到的文件夹列表中搜索 的值'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。请注意这一点。

参考:

于 2022-02-07T04:50:11.877 回答