一、建立FTP連接
Python的ftplib庫可以用於向FTP服務器上傳文件。首先需要建立到FTP服務器的連接,可以通過FTP類來實現。FTP類接受一個參數——FTP服務器的主機名,然後使用FTP對象中的login方法連接到FTP服務器上。
import ftplib # 建立FTP服務器連接 ftp = ftplib.FTP("ftp.example.com") # 登錄到FTP服務器 ftp.login("username", "password")
在上面的代碼中,參數“username”和“password”應該使用FTP服務器登錄的用戶名和密碼代替,如無異常,連接成功後“220”響應碼將被觸發。如果無法建立連接,該庫將生成“ftplib.error_perm”異常。
二、上傳文件到FTP服務器
在連接到FTP服務器以後,我們可以調用FTP對象中的ftp.storbinary()函數將本地文件傳輸到FTP服務器上。
import ftplib ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") # 以二進制格式打開本地文件 with open("example.txt", "rb") as file: # 將文件上傳到FTP服務器 ftp.storbinary('STOR /example.txt', file)
上述代碼將打開名稱為“example.txt”的本地文件,將其讀取為二進制形式,然後將其保存到FTP服務器的根目錄下。
三、關閉連接
上傳完成後我們需要終止連接。可以使用FTP對象中的ftp.quit()函數,它將向FTP服務器發送QUIT命令並關閉連接。
import ftplib ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") with open("example.txt", "rb") as file: ftp.storbinary('STOR /example.txt', file) # 關閉FTP服務器的連接 ftp.quit()
四、帶有進度的上傳文件到FTP服務器
您可以使用tqdm庫在Python中添加上傳文件的進度條。Tqdm提供了可配置的實時進度條,可以輕鬆地與Python中的任何迭代器一起使用。您可以通過安裝tqdm庫(pip install tqdm)來使用它。
import ftplib from tqdm import tqdm import os ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") filename = "example.txt" filesize = os.path.getsize(filename) with open(filename, "rb") as file: with tqdm(total=filesize, unit="B", unit_scale=True, desc=filename) as tqdm_instance: def upload_callback(chunk): ftp.storbinary("STOR /example.txt", chunk, callback=lambda sent: tqdm_instance.update(len(sent))) upload_callback(file.read()) # 關閉FTP服務器的連接 ftp.quit()
上述代碼使用tqdm庫和Python中的os函數獲取本地文件大小。我們設置upload_callback函數去傳輸每個文件塊並更新進度條,然後將其傳遞給ftp.storbinary()函數執行上傳。
五、傳輸大文件到FTP服務器
如果要上傳大文件,則可以使用FTP的分段上傳功能進行上傳。分段傳輸還稱為“斷點續傳”,是一種上傳超大文件的有效策略,可以將要上傳的文件切成多個塊。此方法在上傳失誤或服務器中斷時,可重複地上傳單個文件塊,而無需重新傳輸整個文件。
import ftplib import os filename = "example.txt" ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") with open(filename, "rb") as file: upload_size = 0 while True: chunk = file.read(8196) if not chunk: break upload_size += len(chunk) ftp.storbinary(f"APPE {filename}", chunk, 8196) print(f"已上傳{upload_size}/{os.path.getsize(filename)}字節") # 關閉FTP服務器的連接 ftp.quit()
上述代碼使用“APPE”命令將所有文件塊添加到文件中。如果文件還不存在,FTP服務器將為您創建新文件,否則FTP服務器將添加到文件的末尾。
六、處理FTP服務器上已存在的文件
如果FTP服務器上已經存在相同名稱的文件,可以在FTP服務器對文件重命名或覆蓋。
覆蓋原有文件
import ftplib ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") with open("example.txt", "rb") as file: ftp.storbinary('STOR /example.txt', file, 1024) # 關閉FTP服務器的連接 ftp.quit()
以上代碼確保在FTP服務器的根目錄下存在一個名為“example.txt”的文件。如果文件存在,則會替換它。如果文件不存在,則創建新文件並寫入內容。
重命名FTP服務器上的文件
import ftplib ftp = ftplib.FTP("ftp.example.com") ftp.login("username", "password") ftp.rename("example.txt", "example_backup.txt") # 關閉FTP服務器的連接 ftp.quit()
以上代碼將FTP服務器上的“example.txt”重命名為“example_backup.txt”。
七、異常錯誤處理
在進行FTP上傳之前,請檢查網絡連接和FTP服務器設置。以下是ftp.storbinary()函數可能引發的異常:ftplib.error_perm、ftplib.error_temp、ftplib.error_proto 和 ftplib.error_reply。
import ftplib ftp = ftplib.FTP("ftp.example.com") try: ftp.login("username", "password") with open("example.txt", "rb") as file: ftp.storbinary('STOR /example.txt', file) except ftplib.all_errors as e: print(str(e)) finally: ftp.quit()
以這種方式可以輕鬆處理異常,確保在處理上傳文件時出現錯誤時,關閉FTP服務器的連接。
八、總結
在Python中通過ftplib庫實現FTP上傳文件的過程和方法非常簡單。本文介紹了基本的FTP上傳文件過程,包括建立FTP連接、上傳文件、關閉連接、帶有進度的上傳文件到FTP服務器、傳輸大文件到FTP服務器、處理FTP服務器上的文件和異常錯誤處理等。Python FTP上傳的功能廣泛應用於實際開發中,本文介紹的方法適用於上傳數據和文件。如果您需要從FTP服務器上下載文件,請使用類似的代碼來打開FTP連接,然後使用ftp.retrbinary()函數從FTP服務器檢索文件。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/277616.html