Python利用ftplib庫實現(xiàn)ftp文件傳輸自動化全攻略
大家好!在日常工作中都會使用到ftp功能,用于上傳和下載文件等,本章主要介紹Python的標(biāo)準(zhǔn)庫ftplib來實現(xiàn)FTP文件傳輸,幫助我們實現(xiàn)ftp自動化。
01 ftplib庫核心函數(shù)速查表
1?? 連接與登錄????
#非加密傳輸
from ftplib import FTP
# 創(chuàng)建FTP對象
ftp = FTP()
# 連接服務(wù)器,ftp默認(rèn)端口為21
ftp.connect(host='168.0.0.1', port=21)
# 登錄認(rèn)證,輸入正確的用戶名和密碼
ftp.login(user='your_username', passwd='your_password')
# 操作完成后,安全退出連接
ftp.quit()
#使用FTPS加密連接,加密傳輸,防止數(shù)據(jù)泄露。
from ftplib import FTP_TLS
ftps = FTP_TLS('secure.example.com')
ftps.login(user='admin', passwd='secret')
ftps.prot_p() # 啟用加密數(shù)據(jù)通道說明:通過FTP()創(chuàng)建對象,connect方法指定服務(wù)器地址和端口建立連接,login方法輸入用戶名和密碼完成認(rèn)證,操作結(jié)束后用quit方法關(guān)閉連接,避免資源浪費。
2?? 目錄操作
# 獲取當(dāng)前所在目錄
current_dir = ftp.pwd()
print(f"當(dāng)前目錄: {current_dir}")
# 切換到目標(biāo)目錄
ftp.cwd('/remote/files')
# 在服務(wù)器上創(chuàng)建新目錄
ftp.mkd('new_folder')
# 刪除空目錄,注意目錄必須為空才能刪除成功
ftp.rmd('old_folder')3?? 文件上傳下載
1)上傳文件
# 以二進(jìn)制模式上傳文件,適用于圖片、壓縮包等非文本文件
with open('local_file.zip', 'rb') as f:
ftp.storbinary('STOR remote_file.zip', f)
# 以ASCII模式上傳文本文件,如txt,log,html,xml等,保證文本格式正確
with open('readme.txt', 'r') as f:
ftp.storlines('STOR readme.txt', f)說明:'STOR remote_file.zip'中的STOR是標(biāo)準(zhǔn)化寫法,后面跟的是要上傳的文件。
2)下載文件???????
# 以二進(jìn)制模式下載文件,將服務(wù)器文件保存到本地,第二個參事室回調(diào)函數(shù)
with open('local.zip', 'wb') as f:
ftp.retrbinary('RETR remote.zip', f.write)
#傳輸大文件時,合理設(shè)置緩沖區(qū)大小能提升傳輸效率:
# 設(shè)置緩沖區(qū)大小為1MB,可根據(jù)實際情況調(diào)整
BUFFER_SIZE = 1024 * 1024
# 使用設(shè)置好的緩沖區(qū)大小下載大文件
with open('large_file.iso', 'wb') as f:
ftp.retrbinary('RETR large_file.iso', f.write, blocksize=BUFFER_SIZE)
# 以文本模式下載文件,將服務(wù)器文件保存到本地
with open('local.txt', 'wb') as f:
ftp.retrlines('RETR remote.txt', f.write)說明:'STOR remote_file.zip'中的STOR是標(biāo)準(zhǔn)化寫法,后面跟的是要上傳的文件。
在實際使用中,下載文本文件時,可能會遇到轉(zhuǎn)換換行符失敗的情況,多行的文件下載后變?yōu)榱艘恍小?/p>
此時可以自己重寫回調(diào)函數(shù),在每一行末尾加上換行符,如下:???????
def write(line):
f.write(line + '\n')
# 以文本模式下載文件,將服務(wù)器文件保存到本地 回調(diào)函數(shù)為自己定義的write函數(shù)
with open('local.txt', 'wb') as f:
ftp.retrlines('RETR remote.txt', write)4?? 文件管理
對服務(wù)器上的文件進(jìn)行管理,這些函數(shù)能滿足你的常見需求:???????
# 刪除遠(yuǎn)程服務(wù)器上的指定文件
ftp.delete('obsolete_file.txt')
# 重命名文件,方便文件整理
ftp.rename('old_name.txt', 'new_name.txt')
# 獲取文件大小,了解文件占用空間
size = ftp.size('large_file.iso')
print(f"文件大小: {size} 字節(jié)")5?? 目錄列表
查看服務(wù)器目錄內(nèi)容,這幾種方式能讓你快速獲取文件信息:???????
# 獲取簡潔的文件列表
files = ftp.nlst()
print("目錄內(nèi)容:", files)
# 獲取詳細(xì)文件列表,直接打印到控制臺
ftp.dir()
# 解析詳細(xì)列表,獲取文件名和類型
ftp.mlsd()6?? 其他操作???????
# 設(shè)置編碼
ftp.encoding = 'utf-8'
# 設(shè)置傳輸模式
ftp.set_pasv(True) # 被動模式(推薦)
# 發(fā)送自定義命令
response = ftp.sendcmd('HELP') # 獲取服務(wù)器支持的命令
print("服務(wù)器支持命令:", response)
# 獲取文件修改時間
mod_time = ftp.sendcmd('MDTM config.ini')
print(f"最后修改時間: {mod_time[4:]}")
# 設(shè)置超時時間
ftp = FTP(timeout=30)
# 異常處理示例,出現(xiàn)登錄失敗等問題時可添加重試邏輯
try:
ftp.login(user, passwd)
except ftplib.error_temp as e:
print(f"登錄失敗: {e}")02實戰(zhàn)案例
案例 1:自動備份數(shù)據(jù)到FTP???????
import os
from datetime import datetime
from ftplib import FTP
def backup_site(local_dir, ftp_dir):
# 創(chuàng)建帶時間戳的備份目錄,方便區(qū)分不同時間的備份
timestamp = datetime.now().strftime("%Y%m%d_%H%M")
backup_dir = f"{ftp_dir}/backup_{timestamp}"
ftp = FTP('host地址')
ftp.login('user', 'password')
# 在服務(wù)器上創(chuàng)建備份目錄
ftp.mkd(backup_dir)
ftp.cwd(backup_dir)
# 遍歷本地目錄,上傳所有文件
for file in os.listdir(local_dir):
local_path = os.path.join(local_dir, file)
if os.path.isfile(local_path):
with open(local_path, 'rb') as f:
ftp.storbinary(f'STOR {file}', f)
print(f"備份完成至: {backup_dir}")
ftp.quit()
backup_site('dir1', '/dir2')案例 2:定時下載日志文件
自動獲取服務(wù)器日志,便于后續(xù)分析和排查問題:???????
import schedule
import time
from ftplib import FTP
def download_logs():
ftp = FTP('host地址')
ftp.login('user', 'password')
ftp.cwd('/logs')
# 只下載今日日志,精準(zhǔn)獲取所需數(shù)據(jù)
today = time.strftime("%Y%m%d")
for file in ftp.nlst():
if today in file:
with open(file, 'wb') as f:
ftp.retrbinary(f'RETR {file}', f.write)
ftp.quit()
# 設(shè)置每天凌晨00:05執(zhí)行下載任務(wù)
schedule.every().day.at("00:05").do(download_logs)
while True:
schedule.run_pending()
time.sleep(60)以上就是Python利用ftplib庫實現(xiàn)ftp文件傳輸自動化全攻略的詳細(xì)內(nèi)容,更多關(guān)于Python ftplib庫ftp文件傳輸自動化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于python實現(xiàn)Pycharm斷點調(diào)試
這篇文章主要介紹了基于python實現(xiàn)Pycharm斷點調(diào)試,在我們寫程序的時候,很容易遇到各種各樣的bug,然后編譯器提示程序出錯的地方。很多時候可以通過提示的信息修改程序,但是有時我們想得到更多的信息,這個時候就需要進(jìn)行斷點調(diào)試,下面我們就一起來學(xué)習(xí)ycharm斷點調(diào)試2022-02-02
python實現(xiàn)將Word文檔中的文字轉(zhuǎn)換成語音的操作步驟
在Python中實現(xiàn)文字轉(zhuǎn)語音(Text-to-Speech, TTS)功能,能夠廣泛應(yīng)用于多種場景,如語音助手、有聲讀物、無障礙閱讀等,本文將結(jié)合具體案例,詳細(xì)介紹如何在Python中實現(xiàn)文字轉(zhuǎn)語音功能,需要的朋友可以參考下2024-08-08
Python使用wxPython和PyMuPDF實現(xiàn)合并PDF文檔
處理大量的PDF文檔可能會變得復(fù)雜和耗時,但是,使用Python編程和一些強(qiáng)大的庫,可以使這個任務(wù)變得簡單而高效,下面我們就來看看Python如何使用wxPython和PyMuPDF合并PDF文檔并自動復(fù)制到剪貼板吧2023-11-11
python3應(yīng)用windows api對后臺程序窗口及桌面截圖并保存的方法
今天小編就為大家分享一篇python3應(yīng)用windows api對后臺程序窗口及桌面截圖并保存的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
揭秘Python?Socket網(wǎng)絡(luò)編程的7種硬核用法
Socket?不僅能做聊天室,還能干一大堆硬核操作,這篇文章就帶大家看看?Python?網(wǎng)絡(luò)編程的7種超實用玩法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
使用Python PIL庫讀取文件批量處理圖片大小實現(xiàn)
這篇文章主要為大家介紹了使用Python PIL庫讀取文件批量處理圖片大小實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

