Unggah file python google drive api

Google Drive memungkinkan Anda untuk menyimpan file Anda di cloud, yang dapat Anda akses kapan saja dan di mana saja di dunia. Dalam tutorial ini, Anda akan belajar cara membuat daftar file Google drive Anda, mencarinya, mengunduh file yang disimpan, dan bahkan mengunggah file lokal ke drive Anda secara terprogram menggunakan Python

Berikut adalah daftar isi

Untuk memulai, mari instal pustaka yang diperlukan untuk tutorial ini

pip3 install google-api-python-client google-auth-httplib2 google-auth-oauthlib tabulate requests tqdm

Aktifkan API Drive

Mengaktifkan Google Drive API sangat mirip dengan Google API lainnya seperti Gmail API, YouTube API, atau Google Search Engine API. Pertama, Anda harus memiliki akun Google dengan Google Drive diaktifkan. Buka halaman ini dan klik tombol "Enable the Drive API" seperti yang ditunjukkan di bawah ini

Jendela baru akan muncul; . Saya akan tetap menggunakan "Aplikasi desktop" dan kemudian menekan tombol "Buat". Setelah itu, Anda akan melihat jendela lain muncul mengatakan Anda sudah siap

Unduh kredensial Anda dengan mengklik tombol "Unduh Konfigurasi Klien" dan kemudian "Selesai"

Terakhir, Anda perlu memasukkan import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_8 yang diunduh ke direktori kerja Anda (mis. e. , tempat Anda menjalankan skrip Python yang akan datang)

Daftar File dan Direktori

Sebelum kita melakukan apapun, kita perlu mengautentikasi kode kita ke akun Google kita. Fungsi di bawah melakukan itu

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_

Kami telah mengimpor modul yang diperlukan. Fungsi di atas diambil dari halaman quickstart Google Drive. Ini pada dasarnya mencari file import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_9 untuk mengautentikasi dengan akun Google Anda. Jika tidak menemukannya, itu akan menggunakan import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)8 untuk meminta Anda untuk otentikasi di browser Anda. Setelah itu, itu akan memulai layanan Google Drive API dan mengembalikannya

Pergi ke fungsi utama, mari kita tentukan fungsi yang mencantumkan file di drive kita

def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)

Jadi kami menggunakan fungsi def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)1 untuk mengembalikan lima file/folder pertama yang dapat diakses pengguna dengan menentukan def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)2, kami meneruskan beberapa bidang berguna ke parameter def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)3 untuk mendapatkan detail tentang file yang terdaftar, seperti def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)4 (jenis file), def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)5 di . Periksa halaman ini untuk melihat semua kolom lainnya

Perhatikan kita menggunakan fungsi def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)_7, kita belum mendefinisikan fungsi ini. Karena hasilnya sekarang adalah daftar kamus, itu tidak mudah dibaca. Kami meneruskan item ke fungsi ini untuk mencetaknya dalam format yang dapat dibaca manusia

def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)

Kami mengubah daftar variabel item kamus menjadi daftar variabel baris tupel, dan kemudian meneruskannya ke modul tabulasi yang kami pasang sebelumnya untuk mencetaknya dalam format yang bagus, sebut saja fungsi def main(): """Shows basic usage of the Drive v3 API. Prints the names and ids of the first 5 files the user has access to. """ service = get_gdrive_service() # Call the Drive v3 API results = service.files().list( pageSize=5, fields="nextPageToken, files(id, name, mimeType, size, parents, modifiedTime)").execute() # get the results items = results.get('files', []) # list all 20 files & folders list_files(items)8

if __name__ == '__main__': main()

Lihat keluaran saya

Files: ID Name Parents Size Type Modified Time --------------------------------- ------------------------------ ----------------------- -------- ---------------------------- ------------------------ 1FaD2BVO_ppps2BFm463JzKM-gGcEdWVT some_text.txt ['0AOEK-gp9UUuOUk9RVA'] 31.00B text/plain 2020-05-15T13:22:20.000Z 1vRRRh5OlXpb-vJtphPweCvoh7qYILJYi google-drive-512.png ['0AOEK-gp9UUuOUk9RVA'] 15.62KB image/png 2020-05-14T23:57:18.000Z 1wYY_5Fic8yt8KSy8nnQfjah9EfVRDoIE bbc.zip ['0AOEK-gp9UUuOUk9RVA'] 863.61KB application/x-zip-compressed 2019-08-19T09:52:22.000Z 1FX-KwO6EpCMQg9wtsitQ-JUqYduTWZub Nasdaq 100 Historical Data.csv ['0AOEK-gp9UUuOUk9RVA'] 363.10KB text/csv 2019-05-17T16:00:44.000Z 1shTHGozbqzzy9Rww9IAV5_CCzgPrO30R my_python_code.py ['0AOEK-gp9UUuOUk9RVA'] 1.92MB text/x-python 2019-05-13T14:21:10.000Z

Ini adalah file di Google Drive saya. Perhatikan kolom Ukuran diskalakan dalam byte;

def get_size_format(b, factor=1024, suffix="B"): """ Scale bytes to its proper byte format e.g: 1253656 => '1.20MB' 1253656678 => '1.17GB' """ for unit in ["", "K", "M", "G", "T", "P", "E", "Z"]: if b < factor: return f"{b:.2f}{unit}{suffix}" b /= factor return f"{b:.2f}Y{suffix}"

Fungsi di atas harus didefinisikan sebelum menjalankan metode ________5______8. Jika tidak, itu akan menimbulkan kesalahan. Untuk kenyamanan, periksa

Ingat setelah Anda menjalankan skrip, Anda akan diminta di browser default Anda untuk memilih akun Google Anda dan mengizinkan aplikasi Anda untuk cakupan yang Anda tentukan sebelumnya, jangan khawatir, ini hanya akan terjadi saat pertama kali Anda menjalankannya, lalu

Catatan. Terkadang, Anda akan menemukan peringatan "Aplikasi ini tidak divalidasi" (karena Google tidak memverifikasi aplikasi Anda) setelah memilih akun Google Anda. Tidak apa-apa untuk pergi ke bagian "Lanjutan" dan mengizinkan aplikasi ke akun Anda

Unggah berkas

Untuk mengunggah file ke Google Drive kami, kami perlu mengubah def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)3 daftar yang kami tentukan sebelumnya, kami perlu menambahkan izin untuk menambahkan file/folder

from __future__ import print_function import pickle import os.path from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from googleapiclient.http import MediaFileUpload # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly', '//www.googleapis.com/auth/drive.file']

Ruang lingkup yang berbeda berarti hak istimewa yang berbeda, dan Anda perlu menghapus file import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)9 di direktori kerja Anda dan menjalankan kembali kode untuk mengotentikasi dengan ruang lingkup baru

Kami akan menggunakan fungsi def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)_5 yang sama untuk mengautentikasi akun kami, mari buat fungsi untuk membuat folder dan mengunggah file sampel ke dalamnya

def upload_files(): """ Creates a folder and upload a file to it """ # authenticate account service = get_gdrive_service() # folder details we want to make folder_metadata = { "name": "TestFolder", "mimeType": "application/vnd.google-apps.folder" } # create the folder file = service.files().create(body=folder_metadata, fields="id").execute() # get the folder id folder_id = file.get("id") print("Folder ID:", folder_id) # upload a file text file # first, define file metadata, such as the name and the parent folder ID file_metadata = { "name": "test.txt", "parents": [folder_id] } # upload media = MediaFileUpload("test.txt", resumable=True) file = service.files().create(body=file_metadata, media_body=media, fields='id').execute() print("File created, id:", file.get("id"))

Kami menggunakan metode def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)_6 untuk membuat folder baru, kami melewati kamus def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)7 yang memiliki jenis dan nama folder yang ingin kami buat, kami melewati def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)8 untuk mengambil id folder sehingga kami dapat mengunggah file ke folder itu

Selanjutnya, kami menggunakan kelas def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)_9 untuk mengunggah file sampel dan menyebarkannya ke metode def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)6 yang sama, pastikan Anda memiliki file uji pilihan Anda yang disebut if __name__ == '__main__': main()1, kali ini kami menentukan atribut if __name__ == '__main__': main()2 dalam kamus metadata, kami cukup meletakkan folder . Mari kita jalankan

if __name__ == '__main__': upload_files()

Setelah saya menjalankan kode, folder baru dibuat di Google Drive saya

Dan memang, setelah saya masuk ke folder itu, saya melihat file yang baru saja kita unggah

Kami menggunakan file teks untuk demonstrasi, tetapi Anda dapat mengunggah semua jenis file yang Anda inginkan. Periksalah

Cari File dan Direktori

Google Drive memungkinkan kita untuk mencari file dan direktori menggunakan metode if __name__ == '__main__': main()3 yang sebelumnya digunakan hanya dengan meneruskan parameter if __name__ == '__main__': main()4, fungsi di bawah mengambil layanan dan kueri Drive API dan mengembalikan item yang difilter

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_0

Mari kita lihat bagaimana menggunakan fungsi ini

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_1

Jadi kami memfilter file teks/biasa di sini dengan menggunakan "mimeType='text/plain'" sebagai parameter if __name__ == '__main__': main()5, jika Anda ingin memfilter berdasarkan nama, Anda cukup menggunakan if __name__ == '__main__': main()6 sebagai parameter kueri. Lihat dokumentasi Google Drive API untuk informasi lebih detail

Mari kita jalankan ini

if __name__ == '__main__': main()

Keluaran

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_3

Periksa kode lengkapnya

Terkait. Cara Menggunakan API Gmail dengan Python

Unduh File

Untuk mendownload file, kita perlu terlebih dahulu mendapatkan file yang ingin kita download. Kami dapat mencarinya menggunakan kode sebelumnya atau secara manual mendapatkan ID drive-nya. Di bagian ini, kita akan mencari file berdasarkan nama dan mengunduhnya ke disk lokal kita

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_4

Saya telah menambahkan dua cakupan di sini. Itu karena kami perlu membuat izin untuk membuat file dapat dibagikan dan diunduh. Inilah fungsi utamanya

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_5

Anda melihat tiga baris pertama di resep sebelumnya. Kami cukup mengautentikasi dengan akun Google kami dan mencari file yang diinginkan untuk diunduh

Setelah itu, kami mengekstrak ID file dan membuat izin baru yang memungkinkan kami mengunduh file, dan ini sama dengan membuat tombol tautan yang dapat dibagikan di antarmuka web Google Drive

Terakhir, kami menggunakan fungsi if __name__ == '__main__': main()_7 yang kami tentukan untuk mengunduh file, begitulah

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_6

Saya telah mengambil sebagian dari kode di atas dari mengunduh file tutorial;

Saya telah menggunakan perpustakaan tqdm untuk mencetak bilah kemajuan untuk melihat kapan selesai, yang akan berguna untuk file besar. Mari kita jalankan

import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)_7

Ini akan mencari file Files: ID Name Parents Size Type Modified Time --------------------------------- ------------------------------ ----------------------- -------- ---------------------------- ------------------------ 1FaD2BVO_ppps2BFm463JzKM-gGcEdWVT some_text.txt ['0AOEK-gp9UUuOUk9RVA'] 31.00B text/plain 2020-05-15T13:22:20.000Z 1vRRRh5OlXpb-vJtphPweCvoh7qYILJYi google-drive-512.png ['0AOEK-gp9UUuOUk9RVA'] 15.62KB image/png 2020-05-14T23:57:18.000Z 1wYY_5Fic8yt8KSy8nnQfjah9EfVRDoIE bbc.zip ['0AOEK-gp9UUuOUk9RVA'] 863.61KB application/x-zip-compressed 2019-08-19T09:52:22.000Z 1FX-KwO6EpCMQg9wtsitQ-JUqYduTWZub Nasdaq 100 Historical Data.csv ['0AOEK-gp9UUuOUk9RVA'] 363.10KB text/csv 2019-05-17T16:00:44.000Z 1shTHGozbqzzy9Rww9IAV5_CCzgPrO30R my_python_code.py ['0AOEK-gp9UUuOUk9RVA'] 1.92MB text/x-python 2019-05-13T14:21:10.000Z0, unduh dan simpan di direktori kerja Anda. Memeriksa

Kesimpulan

Baiklah, begitulah. Ini pada dasarnya adalah fungsi inti dari Google Drive. Sekarang Anda tahu cara melakukannya dengan Python tanpa klik mouse manual

Ingat, setiap kali Anda mengubah daftar def list_files(items): """given items returned by Google Drive API, prints them in a tabular way""" if not items: # empty drive print('No files found.') else: rows = [] for item in items: # get the File ID id = item["id"] # get the name of file name = item["name"] try: # parent directory ID parents = item["parents"] except: # has no parrents parents = "N/A" try: # get the size in nice bytes format (KB, MB, etc.) size = get_size_format(int(item["size"])) except: # not a file, may be a folder size = "N/A" # get the Google Drive type of file mime_type = item["mimeType"] # get last modified date time modified_time = item["modifiedTime"] # append everything to the list rows.append((id, name, parents, size, mime_type, modified_time)) print("Files:") # convert to a human readable table table = tabulate(rows, headers=["ID", "Name", "Parents", "Size", "Type", "Modified Time"]) # print the table print(table)3, Anda perlu menghapus file import pickle import os from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from tabulate import tabulate # If modifying these scopes, delete the file token.pickle. SCOPES = ['//www.googleapis.com/auth/drive.metadata.readonly'] def get_gdrive_service(): creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) # return Google Drive API service return build('drive', 'v3', credentials=creds)9 untuk mengautentikasi lagi ke akun Anda dengan cakupan baru. Lihat halaman ini untuk informasi lebih lanjut, beserta daftar cakupan dan penjelasannya

Jangan ragu untuk mengedit kode untuk menerima nama file sebagai parameter untuk mengunduh atau mengunggahnya. Pergi dan coba buat skrip sedinamis mungkin dengan memperkenalkan modul argparse untuk membuat beberapa skrip yang berguna. Mari kita lihat apa yang Anda buat

Bagaimana cara mengunggah file secara otomatis ke Google Drive menggunakan Python?

Prasyarat
Langkah 1. Impor perpustakaan
Langkah 2. OAuth menjadi mudah
Langkah 3. Unggah file ke Google Drive Anda
Langkah 4. Buat daftar file dari Google Drive
Langkah 5. Unduh file dari Google Drive
Langkah 6. Buat file Teks di Google Drive
Langkah 7. Baca konten file teks langsung dari Google Drive

Bagaimana cara mengunggah file ke Google Drive menggunakan API?

API Google Drive memungkinkan Anda mengunggah data file saat membuat atau memperbarui File. .
Kirim permintaan awal dan ambil URI sesi yang dapat dilanjutkan
Unggah data dan pantau status unggahan
(opsional) Jika pengunggahan terganggu, lanjutkan pengunggahan

Apakah ada cara untuk mengunggah file secara otomatis ke Google Drive?

Sinkronisasi Google Drive — upload otomatis untuk akun pribadi . Dengan cara ini, semua file yang Anda tempatkan di folder ini di perangkat Anda akan disimpan secara otomatis di Google Drive Anda.

Bagaimana cara mengakses file Google Drive dari Python?

Otorisasi kredensial untuk aplikasi desktop .
Di konsol Google Cloud, buka menu Menu > API & Layanan > Kredensial. .
Klik Buat Kredensial > ID klien OAuth
Klik Jenis aplikasi > Aplikasi desktop
Di bidang Nama, ketikkan nama untuk kredensial. .
Klik Buat. .
Klik Oke

Postingan terbaru

LIHAT SEMUA