繁体   English   中英

GoogleAPI,Python:如何避免在 Google Drive 中获取指定文件的 ID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM