Python:如何将旧的上传文件替换到 Google 驱动器

Python: How to replace old uploaded files to Google Drive

我在 python 中编写了这个脚本,它看起来像文件夹 'CSVtoGD',在那里列出每个 CSV,并将这些 CSV 作为独立的工作表发送到我的 google 驱动器。我正在尝试编写一行,当我再次 运行 程序时,它将删除旧文件。我在这里错过了什么?我试图通过使用来实现这一点:

sh = gc.del_spreadsheet(filename.split(".")[0]+" TTF")

不幸的是,脚本在添加此行后执行相同的操作。它正在上传新文件但不删除旧文件。

整个脚本看起来像这样

import gspread
import os
gc = gspread.oauth(credentials_filename='/users/user/credentials.json')

os.chdir('/users/user/CSVtoGD')

files = os.listdir()

for filename in files:
   if filename.split(".")[1] == "csv":
      folder_id = '19vrbvaeDqWcxFGwPV82APWYTmB'
      sh = gc.del_spreadsheet(filename.split(".")[0]+" TTF")
      sh = gc.create(filename.split(".")[0]+" TTF", folder_id)
      content = open(filename, 'r').read().encode('utf-8') 
      gc.import_csv(sh.id, content)



一切正常,文件夹中的 CSV 已上传到 google 驱动器,我的问题是删除旧 CSV(与新 CSV 同名)

看gspread的文档,好像del_spreadsheet方法的参数是文件ID。 Ref 当我看到你的脚本时,你正在使用文件名作为参数。我认为这可能是您遇到问题的原因。当这反映在您的脚本中时,它会变成如下。

发件人:

sh = gc.del_spreadsheet(filename.split(".")[0]+" TTF")

收件人:

sh = gc.del_spreadsheet(gc.open(filename.split(".")[0] + " TTF").id)

注:

  • filename.split(".")[0] + " TTF"的文件名的电子表格不存在时,出现错误。请注意这一点。

参考:

已添加:

从您的回复中发现,我提出的修改可以用于“我的云端硬盘”。但是,这似乎不能用于共享驱动器。

当我再次看到gspread的脚本时,我发现当前请求无法使用文件名搜索共享驱动器中的文件。而且,我确认在当前的 gspread 中,无法使用 gspread 检索电子表格 ID。因为无法从所有共享驱动器中搜索文件。至此,我想提出以下修改脚本。

修改后的脚本:

import gspread
import os
from googleapiclient.discovery import build

gc = gspread.oauth(credentials_filename='/users/user/credentials.json')

service = build("drive", "v3", credentials=gc.auth)


def getSpreadsheetId(filename):
    q = f"name='{filename}' and mimeType='application/vnd.google-apps.spreadsheet' and trashed=false" # or q = "name='" + filename + "' and mimeType='application/vnd.google-apps.spreadsheet' and trashed=false"
    res = service.files().list(q=q, fields="files(id)", corpora="allDrives", includeItemsFromAllDrives=True, supportsAllDrives=True).execute()
    items = res.get("files", [])
    if not items:
        print("No files found.")
        exit()
    return items[0]["id"]


os.chdir('/users/user/CSVtoGD')

files = os.listdir()

for filename in files:
    fname = filename.split(".")
    if fname[1] == "csv":
        folder_id = '19vrbvaeDqWcxFGwPV82APWYTmB'
        oldSpreadsheetId = getSpreadsheetId(fname[0] + " TTF")
        sh = gc.del_spreadsheet(oldSpreadsheetId)
        sh = gc.create(fname[0] + " TTF", folder_id)
        content = open(filename, "r").read().encode("utf-8")
        gc.import_csv(sh.id, content)
  • 在此修改中,为了从共享驱动器中的文件名检索电子表格 ID,使用了 python 的 googleapis。 Ref

  • 但是,在这种情况下,它假定您具有写入共享驱动器的权限。请注意这一点。