![](/img/trans.png)
[英]Add xlsx documents to Google Drive shared folder using Python
[英]Upload xlsx into Google Drive shared folder
我想將與.py文件位於同一目錄中的文件risk_pos.xlsx
上傳到共享驅動器中。 任何幫助將不勝感激。
我的代碼:
scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
os.chdir(sys.path[0])
creds = ServiceAccountCredentials.from_json_keyfile_name("client_secret1.json", scope)
client = gspread.authorize(creds)
DRIVE = build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
file_metadata = {'inventory': 'risk_pos.xlsx', 'parents': ['XXXXXXXXXXXXXXXX']}
media = MediaFileUpload('risk_pos.xlsx', mimetype='application/vnd.ms-excel')
files = DRIVE.files().create(body=file_metadata, supportsTeamDrives=True, media_body=media, fields='id').execute()
錯誤:
File "risk_pos3.py", line 59, in <module>
files = DRIVE.files().create(body=file_metadata, supportsTeamDrives=True, media_body=media, fields='id').execute()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/googleapiclient/http.py", line 851, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting
https://www.googleapis.com/upload/drive/v3/files?supportsTeamDrives=true&fields=id&alt=json&uploadType=multipart returned "File not found: XXXXXXXXXXXXXXXXXX.">
編輯:
我現在沒有錯誤。 我只是刪除了'parents': ['XXXXXXXXXXXXXXXX']
周圍的括號'parents': ['XXXXXXXXXXXXXXXX']
但我沒有看到文件顯示在雲端硬盤中。 每次我運行該過程時,似乎都會出現一些新的東西。 名為untitled...
的文件如下所示,您可以看到文件數量在增加。 但雲端硬盤中沒有untitled...
文件。
JRACMB-MahfoudD:market_risk delalma$ python3 risk_pos3.py
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Market_data application/vnd.google-apps.spreadsheet
Market_data_volume application/vnd.google-apps.spreadsheet
Getting started application/pdf
JRACMB-MahfoudD:market_risk delalma$ python3 risk_pos3.py
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Market_data application/vnd.google-apps.spreadsheet
Market_data_volume application/vnd.google-apps.spreadsheet
Getting started application/pdf
JRACMB-MahfoudD:market_risk delalma$ python3 risk_pos3.py
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Untitled application/vnd.ms-excel
Market_data application/vnd.google-apps.spreadsheet
Market_data_volume application/vnd.google-apps.spreadsheet
Getting started application/pdf
服務帳戶非常棘手。 如果上傳沒有錯誤,那么它可能正在上傳,問題是將其上傳到哪里?
服務帳戶不是您具有自己的驅動器帳戶的虛擬用戶。 您可能已將文件上傳到服務帳戶驅動器帳戶。 我要做的第一件事是運行file.list,然后可以看到該文件嗎?
問題是您說您在要求中使用父母。 這意味着您要么在服務帳戶上創建了一個新文件夾並正在使用該文件夾,要么您已經在個人驅動器帳戶上共享了一個文件夾並嘗試上載到該文件夾。 無論哪種方式,file.list都會幫助您確定文件在哪里,如果服務帳戶上傳了該文件,則它可以訪問該文件,這將是查找文件的最簡便方法。
文件分為兩部分上傳。 首先,元數據包含文件名之類的內容,其次是文件本身的實際數據。 您的問題是您沒有上傳元數據。
file_metadata = {'name': 'photo.jpg'}
media = MediaFileUpload('files/photo.jpg',
mimetype='image/jpeg')
file = drive_service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
print 'File ID: %s' % file.get('id')
您可能需要閱讀管理上傳
至於總是創建一個邏輯上的新文件(考慮到您正在發送file.create),那么如果您要覆蓋現有文件,則總是會創建一個新文件,那么您需要執行file.update
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.