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ù)說(shuō)明: localpath:上傳源文件的本地路徑 remotepath:目標(biāo)路徑 callback:獲取接收與總傳輸字節(jié)數(shù) confirm:上傳完畢后是否調(diào)用stat()方法,以便確認(rèn)文件大小 get(self, remotepath, localpath, callback=None) 參數(shù)說(shuō)明: 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庫(kù)中的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庫(kù)遠(yuǎn)程執(zhí)行 SSH 命令,實(shí)現(xiàn) sftp 下載文件
- Python解析m3u8拼接下載mp4視頻文件的示例代碼
- python爬蟲智能翻頁(yè)批量下載文件的實(shí)例詳解
- python 下載文件的幾種方法匯總
- python 基于selectors庫(kù)實(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ī)?lái)一篇python利用paramiko連接遠(yuǎn)程服務(wù)器執(zhí)行命令的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
PyTorch?Distributed?Data?Parallel使用詳解
這篇文章主要為大家介紹了PyTorch?Distributed?Data?Parallel使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問(wèn)題
這篇文章主要介紹了jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Python延時(shí)操作實(shí)現(xiàn)方法示例
這篇文章主要介紹了Python延時(shí)操作實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python基于sched庫(kù)與time庫(kù)實(shí)現(xiàn)延時(shí)操作的方法,需要的朋友可以參考下2018-08-08
python txt中的文件,逐行讀取并且每行賦值給變量問(wèn)題
這篇文章主要介紹了python txt中的文件,逐行讀取并且每行賦值給變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-02-02

