Python 使用SFTP和FTP實(shí)現(xiàn)對(duì)服務(wù)器的文件下載功能
一、用 ftplib 模塊連接遠(yuǎn)程服務(wù)器
ftplib模塊常用方法
ftp登陸連接 from ftplib import FTP #加載ftp模塊 ftp=FTP() #設(shè)置變量 ftp.set_debuglevel(2) #打開調(diào)試級(jí)別2,顯示詳細(xì)信息 ftp.connect("IP","port") #連接的ftp sever和端口 ftp.login("user","password") #連接的用戶名,密碼 print ftp.getwelcome() #打印出歡迎信息 ftp.cmd("xxx/xxx") #進(jìn)入遠(yuǎn)程目錄 bufsize=1024 #設(shè)置的緩沖區(qū)大小 filename="filename.txt" #需要下載的文件 file_handle=open(filename,"wb").write #以寫模式在本地打開文件 ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服務(wù)器上文件并寫入本地文件 ftp.set_debuglevel(0) #關(guān)閉調(diào)試模式 ftp.quit() #退出ftp ftp相關(guān)命令操作 ftp.cwd(pathname) #設(shè)置FTP當(dāng)前操作的路徑 ftp.dir() #顯示目錄下所有目錄信息 ftp.nlst() #獲取目錄下的文件 ftp.mkd(pathname) #新建遠(yuǎn)程目錄 ftp.pwd() #返回當(dāng)前所在位置 ftp.rmd(dirname) #刪除遠(yuǎn)程目錄 ftp.delete(filename) #刪除遠(yuǎn)程文件 ftp.rename(fromname, toname)#將fromname修改名稱為toname。 ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標(biāo)文件 ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下載FTP文件
ftplib模塊封裝調(diào)用
from ftplib import FTP from common.logModule import LogClass class FTPClass(LogClass): """ :FTP連接遠(yuǎn)程服務(wù)器下載文件 """ def __init__(self, ftp_link, ftp_path=None): """ :連接ftp服務(wù)器 :param ftp_link: 服務(wù)器ip, 用戶名, 密碼 :param ftp_path: ftp中的文件路徑 """ LogClass.__init__(self, logName='FTPClass') self.ftp = FTP(ftp_link[0]) # 鏈接FTP self.ftp.set_debuglevel(2) # 設(shè)置調(diào)試等級(jí) self.ftp.login(ftp_link[1], ftp_link[2]) # 輸入用戶名和密碼 self.ftp.set_pasv(False) # False:主動(dòng)模式 True:被動(dòng)模式 if ftp_path: self.ftp.cwd(ftp_path) def download_file(self, like_file_name, save_path, save_name=None): """ :下載文件并保存文件到本地,如果save_name為空則下載所有文件名稱包含like_file_name的所有文件 :param like_file_name: 需要下載的文件 :param save_path : 文件保存路徑 :param save_name: 文件保存名稱 :return: """ try: ftp_files = self.ftp.nlst() # 獲取ftp當(dāng)前目錄下的所有文件名稱 if save_name: # 如果文件保存名稱存在則只下載單一文件 fp = open(save_path + save_name, 'wb') # 以寫模式在本地打開文件 self.ftp.retrbinary('RETR ' + 'ftp文件名', fp.write) # 接收服務(wù)器上文件并寫入本地文件 fp.close() # 關(guān)閉文件 else: # 如果文件保存名稱則下載包含like_file_name的所有文件 for ftp_file in ftp_files: if ftp_file[-5:] == '.GRB2': if like_file_name in ftp_file: # 如果文件名稱中包含like_file_name fp = open(save_path + ftp_file, 'wb') # 以寫模式在本地打開文件 self.ftp.retrbinary('RETR ' + ftp_file, fp.write) # 接收服務(wù)器上文件并寫入本地文件 fp.close() # 關(guān)閉文件 self.ftp.quit() # 關(guān)閉ftp 連接 except Exception: raise if __name__ == '__main__': ftp_link = ['ip', 'username', 'password'] ftp_path = '/data/result/' ftp = FTPClass(ftp_link, ftp_path) like_file_name = ".GRB2" save_path = 'D:\\file\\' ftp.download_file(like_file_name, save_path)
用 paramiko 模塊連接遠(yuǎn)程服務(wù)器
paramiko 模塊常用方法
put(self,localpath,remotepath,callback=None,confirm=True) 參數(shù)說明: localpath:上傳源文件的本地路徑 remotepath:目標(biāo)路徑 callback:獲取接收與總傳輸字節(jié)數(shù) confirm:上傳完畢后是否調(diào)用stat()方法,以便確認(rèn)文件大小 get(self, remotepath, localpath, callback=None) 參數(shù)說明: remotepath:需要下載的遠(yuǎn)程文件 localpath:本地存儲(chǔ)路徑 callback:同put方法 mkdir:用于創(chuàng)建目錄 remove:刪除目錄 rename:重命名 stat:獲取文件信息 listdir:獲取目錄列表
paramiko模塊封裝調(diào)用
import os import paramiko from stat import S_ISDIR from common.logModule import LogClass class SFTPClass(LogClass): """ :SFTP連接遠(yuǎn)程服務(wù)器下載文件 """ def __init__(self, ftp_link, ftp_path=None, local_path=None): """ 連接ftp服務(wù)器 """ LogClass.__init__(self, logName='FTPProcess') trans = paramiko.Transport((ftp_link[0], 22)) # 連接 ftp trans.connect(username=ftp_link[1], password=ftp_link[2]) # 輸入用戶名和密碼 self.sftp = paramiko.SFTPClient.from_transport(trans) self.ftp_path = ftp_path # 目標(biāo)路徑 self.local_path = local_path # 保存路徑 def save_all_file_path(self, ftp_path): """保存所有文件的列表""" all_files = list() if ftp_path[-1] == '/': # 去掉路徑字符串最后的字符'/',如果有的話 ftp_path = ftp_path[0:-1] files = self.sftp.listdir_attr(ftp_path) # 獲取當(dāng)前指定目錄下的所有目錄及文件,包含屬性值 for i in files: filename = ftp_path + '/' + i.filename if S_ISDIR(i.st_mode): # 如果是目錄,則遞歸處理該目錄,這里用到了stat庫中的S_ISDIR方法 all_files.extend(self.save_all_file_path(filename)) else: all_files.append(filename) return all_files def download_file(self): """ 下載文件并保存文件到本地 """ try: if self.ftp_path and self.local_path: all_files = self.save_all_file_path(self.ftp_path) # 保存所有文件的列表 for file in all_files: filename = file.split('/')[-1] local_filename = os.path.join(self.local_path, filename) self.logger.info(u'During file download: %s' % filename) self.sftp.get(file, local_filename) # 下載到本地 else: self.logger.error("ftp_path or local_path is null") return except Exception as e: self.logger.error(e) if __name__ == '__main__': ftp_link = ['ip', 'user', 'password'] ftp_path = "/data/" local_path = "D:\\file\\" f = SFTPClass(ftp_link, ftp_path=None, local_path=None) f.download_file()
到此這篇關(guān)于Python 使用SFTP和FTP實(shí)現(xiàn)對(duì)服務(wù)器的文件下載功能的文章就介紹到這了,更多相關(guān)Python 實(shí)現(xiàn)服務(wù)器文件下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用Python自動(dòng)下載網(wǎng)站所有文件
- python基于paramiko庫遠(yuǎn)程執(zhí)行 SSH 命令,實(shí)現(xiàn) sftp 下載文件
- Python解析m3u8拼接下載mp4視頻文件的示例代碼
- python爬蟲智能翻頁批量下載文件的實(shí)例詳解
- python 下載文件的幾種方法匯總
- python 基于selectors庫實(shí)現(xiàn)文件上傳與下載
- Python實(shí)現(xiàn)FTP文件定時(shí)自動(dòng)下載的步驟
- python從ftp獲取文件并下載到本地
- Python根據(jù)URL地址下載文件并保存至對(duì)應(yīng)目錄的實(shí)現(xiàn)
- python 下載文件的幾種方式分享
相關(guān)文章
python利用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行命令的方法
下面小編就為大家?guī)硪黄猵ython利用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行命令的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10PyTorch?Distributed?Data?Parallel使用詳解
這篇文章主要為大家介紹了PyTorch?Distributed?Data?Parallel使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問題
這篇文章主要介紹了jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python延時(shí)操作實(shí)現(xiàn)方法示例
這篇文章主要介紹了Python延時(shí)操作實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python基于sched庫與time庫實(shí)現(xiàn)延時(shí)操作的方法,需要的朋友可以參考下2018-08-08python txt中的文件,逐行讀取并且每行賦值給變量問題
這篇文章主要介紹了python txt中的文件,逐行讀取并且每行賦值給變量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-02-02