一、建立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-tw/n/277616.html