使用Python操作FTP實(shí)現(xiàn)上傳和下載的方法
搭建ftp服務(wù)器server端
# -*- coding:utf-8 -*- from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer # 實(shí)例化DummyAuthorizer來(lái)創(chuàng)建ftp用戶 authorizer = DummyAuthorizer() # 參數(shù):用戶名,密碼,目錄,權(quán)限 authorizer.add_user('admin', '123456', r'C:\Users\Administrator\Desktop\ftp', perm='elradfmwMT') # 匿名登錄 # authorizer.add_anonymous('/home/nobody') handler = FTPHandler handler.authorizer = authorizer # 參數(shù):IP,端口,handler server = FTPServer(('0.0.0.0', 2121), handler) #設(shè)置為0.0.0.0為本機(jī)的IP地址 server.serve_forever()
函數(shù)釋義
Python中默認(rèn)安裝的ftplib模塊定義了FTP類,其中函數(shù)有限,可用來(lái)實(shí)現(xiàn)簡(jiǎn)單的ftp客戶端,用于上傳或下載文件,函數(shù)列舉如下
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文件
- FTP.quit():發(fā)送QUIT命令給服務(wù)器并關(guān)閉掉連接。這是一個(gè)比較“緩和”的關(guān)閉連接方式,但是如果服務(wù)器對(duì)QUIT命令返回錯(cuò)誤時(shí),會(huì)拋出異常。
- FTP.close():?jiǎn)畏矫娴年P(guān)閉掉連接,不應(yīng)該用在已經(jīng)關(guān)閉的連接之后,例如不應(yīng)用在FTP.quit()之后。
例:下載、上傳文件
# coding: utf-8 from ftplib import FTP import time import tarfile import os # !/usr/bin/python # -*- coding: utf-8 -*- from ftplib import FTP def ftpconnect(host, username, password): ftp = FTP() # ftp.set_debuglevel(2) ftp.connect(host, 21) ftp.login(username, password) return ftp #從ftp下載文件 def downloadfile(ftp, remotepath, localpath): bufsize = 1024 fp = open(localpath, 'wb') ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize) ftp.set_debuglevel(0) fp.close() #從本地上傳文件到ftp def uploadfile(ftp, remotepath, localpath): bufsize = 1024 fp = open(localpath, 'rb') ftp.storbinary('STOR ' + remotepath, fp, bufsize) ftp.set_debuglevel(0) fp.close() if __name__ == "__main__": ftp = ftpconnect("113.105.139.xxx", "ftp***", "Guest***") downloadfile(ftp, "Faint.mp4", "C:/Users/Administrator/Desktop/test.mp4") #調(diào)用本地播放器播放下載的視頻 os.system('start "C:\Program Files\Windows Media Player\wmplayer.exe" "C:/Users/Administrator/Desktop/test.mp4"') uploadfile(ftp, "C:/Users/Administrator/Desktop/test.mp4", "test.mp4") ftp.quit()
FTP對(duì)象方法說(shuō)明
- login(user='anonymous',passwd=”, acct=”) 登錄 FTP 服務(wù)器,所有參數(shù)都是可選的
- pwd() 獲得當(dāng)前工作目錄
- cwd(path) 把當(dāng)前工作目錄設(shè)置為 path 所示的路徑
- dir ([path[,…[,cb]]) 顯示 path 目錄里的內(nèi)容,可選的參數(shù) cb 是一個(gè)回調(diào)函數(shù),會(huì)傳遞給 retrlines()方法
- nlst ([path[,…]) 與 dir()類似, 但返回一個(gè)文件名列表,而不是顯示這些文件名
- retrlines(cmd [, cb]) 給定 FTP命令(如“ RETR filename”),用于下載文本文件??蛇x的回調(diào)函數(shù) cb 用于處理文件的每一行
- retrbinary(cmd,cb[,bs=8192[, ra]]) 與 retrlines()類似,只是這個(gè)指令處理二進(jìn)制文件。回調(diào)函數(shù) cb 用于處理每一塊(塊大小默認(rèn)為 8KB)下載的數(shù)據(jù)
- storlines(cmd, f) 給定 FTP 命令(如“ STOR filename”),用來(lái)上傳文本文件。要給定一個(gè)文件對(duì)象 f
- storbinary(cmd, f,[,bs=8192]) 與 storlines()類似,只是這個(gè)指令處理二進(jìn)制文件。要給定一個(gè)文件對(duì)象 f,上傳塊大小 bs 默認(rèn)為 8KB
- rename(old, new) 把遠(yuǎn)程文件 old 重命名為 new
- delete(path) 刪除位于 path 的遠(yuǎn)程文件
- mkd(directory) 創(chuàng)建遠(yuǎn)程目錄
- rmd(directory) 刪除遠(yuǎn)程目錄
- quit() 關(guān)閉連接并退出
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Python select及selectors模塊概念用法詳解
- Python連接HDFS實(shí)現(xiàn)文件上傳下載及Pandas轉(zhuǎn)換文本文件到CSV操作
- 完美解決python針對(duì)hdfs上傳和下載的問(wèn)題
- Python selenium文件上傳下載功能代碼實(shí)例
- 基于python實(shí)現(xiàn)FTP文件上傳與下載操作(ftp&sftp協(xié)議)
- Python Socketserver實(shí)現(xiàn)FTP文件上傳下載代碼實(shí)例
- python3 requests庫(kù)文件上傳與下載實(shí)現(xiàn)詳解
- python ftp 按目錄結(jié)構(gòu)上傳下載的實(shí)現(xiàn)代碼
- python實(shí)現(xiàn)上傳下載文件功能
- python實(shí)現(xiàn)的簡(jiǎn)單FTP上傳下載文件實(shí)例
- python 基于selectors庫(kù)實(shí)現(xiàn)文件上傳與下載
相關(guān)文章
python 在服務(wù)器上調(diào)用數(shù)據(jù)庫(kù)特別慢的解決過(guò)程
這篇文章主要介紹了python 在服務(wù)器上調(diào)用數(shù)據(jù)庫(kù)特別慢的解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Python數(shù)據(jù)讀寫之Python讀寫CSV文件
這篇文章主要介紹了Python數(shù)據(jù)讀寫之Python讀寫CSV文件,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06Python光學(xué)仿真理解Jones矩陣學(xué)習(xí)
這篇文章主要為大家介紹了Python光學(xué)仿真理解Jones矩陣的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10Python對(duì)字符串實(shí)現(xiàn)去重操作的方法示例
字符串去重是python中字符串操作常見的一個(gè)需求,最近在工作中就又遇到了,所以下面這篇文章主要給大家介紹了關(guān)于Python對(duì)字符串實(shí)現(xiàn)去重操作的相關(guān)資料,文中給出了詳細(xì)的介紹,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)敵人精靈篇
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開始講解敵人精靈的使用2022-08-08Pandas庫(kù)中dataframe.corr()函數(shù)的使用
dataframe.corr()是Pandas庫(kù)中的一個(gè)函數(shù),用于計(jì)算DataFrame中各列之間的相關(guān)系數(shù),本文主要介紹了Pandas庫(kù)中dataframe.corr()函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07