如何从列表 python 中提取 google 驱动器文件 ID?

how to pull google drive file id's from list python?

大家好,我的 google 驱动器中有多个文件,我需要获取文件 ID 才能与他人共享下载链接。但我似乎一次只能获得 1 个文件 ID。有没有办法提取所有文件 ID 并将它们与列表匹配?

在我的名单A,B C

每个字母代表一个订单号我试图保持简单但 A 实际上是一个订单号 3472834,B=3293881,C=,3498249。

在google驱动器示例中:File1,File2,File3

我的 google 驱动器中的文件是订单的 pdf 打印输出。它们实际上被命名为订单号 File 1= 3472834, File 2= 3293881, File 3 =3498249

所以我的目标是遍历每个 ListIDS 并获得相应的 Google 文件 ID。但我似乎无法做到,但每次第一个 google 文件 ID。

代码:

ListIDS= ['A','B','C']
for eachId in ListIDS:

service = create_service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
filename= f'{ListID}'
query = "name contains " + "'"+ filename +"' and trashed = false"
response = service.files().list(q=query, fields= 'files(id,name)').execute()
files = response.get('files')
if files:
  print("File Found!")
  google_file_name=  files[0].get('name')
  google_file_id = files[0].get('id')
  print (google_file_id)
  print(google_file_name)
else:
  print("FileNot Found")

FileURL= "https://drive.google.com/file/d/"+ google_file_id + "/view?usp=sharing"

但同样的问题是,例如,我只得到所有 3 个列表 id 的第二个值 B

output:

https://drive.google.com/file/d/FileB_ID_Path/view?usp=sharing

但我的预期结果是:

https://drive.google.com/file/d/FileA_ID_Path/view?usp=sharing
https://drive.google.com/file/d/FileB_ID_Path/view?usp=sharing
https://drive.google.com/file/d/FileC_ID_Path/view?usp=sharing

请帮忙。

我相信你的目标如下。

  • 您的文件名类似于 ListIDS= ['A','B','C']。这些文件名的文件放在您的 Google 驱动器中。
  • 您想使用文件名检索文件的文件 ID。
  • 您想使用 googleapis 实现此目的 python。

这样的话,下面的修改怎么样?

模式一:

在此模式中,使用 ListIDS= ['A','B','C'],使用一个搜索查询。

ListIDS = ['A','B','C']  # filenames

service = create_service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
qFiles = ["name contains " + "'" + e + "'" for e in ListIDS]
query = "(" + " or ".join(qFiles) + ") and trashed = false"
response = service.files().list(q=query, fields='files(id,name)').execute()
files = response.get('files')
values = {}
for e in files:
    for f in ListIDS:
        if f in e.get('name'):
            id = e.get('id')
            v = "https://drive.google.com/file/d/" + id + "/view?usp=sharing"
            if values.get(f):
                values[f].append(v)
            else:
                values[f] = [v]
print(values)
  • 当此脚本为运行时,返回以下JSON对象。

      {
        'A': ["https://drive.google.com/file/d/###/view?usp=sharing"],
        'B': ["https://drive.google.com/file/d/###/view?usp=sharing"],
        'C': ["https://drive.google.com/file/d/###/view?usp=sharing", "https://drive.google.com/file/d/###/view?usp=sharing"]
      }
    
  • 从您的显示脚本中,name contains '###' 被用作搜索查询。因此,当有多个文件由一个文件名返回时,这些文件 ID 将放入数组中。

模式二:

如果ListIDS很大,上述模式可能无法使用。因此,当模式 1 无法使用时,请使用模式 2。在此模式中,使用 ListIDS= ['A','B','C'],使用多个搜索查询。

ListIDS = ['A','B','C']  # filenames

service = create_service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
files = []
for filename in ListIDS:
    query = "name contains " + "'" + filename + "' and trashed = false"
    response = service.files().list(q=query, fields='files(id,name)').execute()
    files.extend(response.get('files'))
values = {}
for e in files:
    for f in ListIDS:
        if f in e.get('name'):
            id = e.get('id')
            v = "https://drive.google.com/file/d/" + id + "/view?usp=sharing"
            if values.get(f):
                values[f].append(v)
            else:
                values[f] = [v]
print(values)
  • 在这种情况下,得到与上述相同的结果。