[英]GoogleAPI, Python: How to avoid getting ID of specified file in Google Drive
我有这部分脚本,它在我的本地文件夹中列出文件,用本地文件夹中的文件替换 Google Drive 中的旧文件,并将新文件从本地文件夹添加到 Google Drive。
如何修改脚本以检查是否有文件即将添加到 GD,因为在以下情况下出现内核崩溃错误:GD 中没有文件“A.csv”,脚本正在上传文件“A. csv" - 就在这之后,我遇到了内核崩溃,因为该脚本正在尝试获取 Google Drive 中尚不存在的文件的电子表格 ID。 GetsppreadsheetID 定义在此处未提及的脚本的其他部分。 谢谢您的帮助。 我不知道如何制作额外的“IF”以避免获取尚未在 Google Drive 中的文件的电子表格 ID。
import gspread
import os
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
gc = gspread.oauth(credentials_filename='/users/krzysztofpaszta/credentials.json')
service = build("drive", "v3", credentials=gc.auth)
folder_id = '19vrbvaeDqWcxFGwPV82APWYTmBMEn-hi'
def getSpreadsheetId(filename, filePath):
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.")
file_metadata = {
"name": filename,
"parents": [folder_id],
"mimeType": "application/vnd.google-apps.spreadsheet",
}
media = MediaFileUpload(filePath + "/" + filename + ".csv")
file = service.files().create(body=file_metadata, media_body=media, fields="id", supportsAllDrives=True).execute()
id = file.get("id")
print("File was uploaded. The file ID is " + id)
exit()
return items[0]["id"]
filePath = '/users/krzysztofpaszta/CSVtoGD'
os.chdir(filePath)
files = os.listdir()
for filename in files:
fname = filename.split(".")
if fname[1] == "csv":
oldSpreadsheetId = getSpreadsheetId(fname[0], filePath) - THIS PART NEEDS TO BE CHANGED
sh = gc.del_spreadsheet(oldSpreadsheetId)
sh = gc.create(fname[0], folder_id)
content = open(filename, "r").read().encode("utf-8")
gc.import_csv(sh.id, content)
好的,首先我不是 python 专家,但我可以看到这个问题。 在下面的代码部分。 您创建新文件。 它将返回给您一个文件 ID。
id = file.get("id")
然而你还在回来
return items[0]["id"]
这是空的。
if not items:
print("No files found.")
file_metadata = {
"name": filename,
"parents": [folder_id],
"mimeType": "application/vnd.google-apps.spreadsheet",
}
media = MediaFileUpload(filePath + "/" + filename + ".csv")
file = service.files().create(body=file_metadata, media_body=media, fields="id", supportsAllDrives=True).execute()
id = file.get("id")
print("File was uploaded. The file ID is " + id)
exit()
return items[0]["id"]
我可以建议这样的事情,如果您确实插入文件,那么您将 id 返回到您的代码。 而如果文件存在,您将从响应中返回 id。
if not items:
print("No files found.")
file_metadata = {
"name": filename,
"parents": [folder_id],
"mimeType": "application/vnd.google-apps.spreadsheet",
}
media = MediaFileUpload(filePath + "/" + filename + ".csv")
file = service.files().create(body=file_metadata, media_body=media, fields="id", supportsAllDrives=True).execute()
id = file.get("id")
print("File was uploaded. The file ID is " + id)
return id
else:
return items[0]["id"]
如果这不起作用,请告诉我我将启动 Pycharm 并试一试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.