我有這個用python撰寫的腳本,它看起來通過檔案夾'CSVtoGD',列出那里的每個CSV并將這些CSV作為獨立的表格發送到我的谷歌驅動器。我正在嘗試寫一行,當我再次運行程式時將洗掉舊檔案。我在這里想念什么?我試圖通過使用來實作:
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 已上傳到谷歌驅動器,我的問題是洗掉舊 CSV(與新 CSV 同名)
uj5u.com熱心網友回復:
當我看到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"不存在時,會發生錯誤。請注意這一點。
參考:
- del_spreadsheet(file_id)
添加:
從您的回復中When I try do delete other file using this method from My Drive it is working well.發現,我提出的修改可以用于“我的云端硬碟”。但是,這似乎不能用于共享驅動器。
當我再次看到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,使用了 googleapis for python。參考
但是,在這種情況下,它假設您具有寫入共享驅動器的權限。請注意這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486694.html
