Ⅰ 如何在Python中使用FTP
from ftplip import FTP # 首先要引入 ftplib 這個庫
# 接著,這是我自定義的幾個用於操作 ftp 的函數,def 後面跟的是自定義函數名,函數體內FTP 相關的語句和函數來自上面 import 那個包,你自己體會吧:
# 初始化 FTP 連接
def ftp_open(HOST,PORT,USERNAME,PASSWORD):
ftp=FTP()
ftp.set_debuglevel(2)
ftp.connect(host=HOST,port=PORT)
ftp.login(USERNAME,PASSWORD)
return ftp
# 關閉 FTP 連接
def ftp_close(ftp):
ftp.set_debuglevel(0)
ftp.quit()
# 文件上傳函數,filename 可以是windows 格式包含全路徑的文件
def ftp_up(ftp,filename):
#print(ftp.getwelcome())
#ftp.cwd('xxx/www')
file_handler=open(filename,'rb')
ftp.storbinary('STOR %s' % os.path.basename(filename),file_handler)
file_handler.close()
print('FTP up OK.')
# 文件下載函數,filename 可以是windows 格式包含全路徑的文件
def ftp_down(ftp,filename):
#print(ftp.getwelcome())
#ftp.cwd('xxx/www')
file_handler=open(filename,'wb')
ftp.retrbinary('RETR %s' % os.path.basename(filename),file_handler)
file_handler.close()
print('FTP down OK.')
Ⅱ 求幫忙寫個python的FTP小腳本或者批處理,復制文件到多個文件夾
有幾個辦法
1.如果是linux,用scp,最簡單。
2.如果是windows,用共享文件夾最簡單,共享完後,復制就可以
3.在目標伺服器上弄一個服務,可以是FTP也可以是自己定義的socketserver。自己做服務端,也做客戶端。這樣許可權比較大。
4.在目錄伺服器上安裝一個標準的ftp伺服器。然後客戶端用python,使用ftplib
具體的用法。你自己去試驗。不會花多少時間。1個小時就弄好了。
先是使用ftp的CD命令到指定的目錄。然後是使用PUT命令上傳文件。
不過如果是方法4,而a,b,c又不是在同一個父目錄下,可能會有許可權問題。
Ⅲ 用python將本地文件上傳到FTP報錯
應該是沒有許可權創建文檔
Ⅳ 有大神知道怎麼使用python 往ftp伺服器上連續上傳下載多張圖片嗎
例:下載、上傳文件
#coding:utf-8
fromftplibimportFTP
importtime
importtarfile
importos
#!/usr/bin/python
#-*-coding:utf-8-*-
fromftplibimportFTP
defftpconnect(host,username,password):
ftp=FTP()
#ftp.set_debuglevel(2)
ftp.connect(host,21)
ftp.login(username,password)
returnftp
#從ftp下載文件
defdownloadfile(ftp,remotepath,localpath):
bufsize=1024
fp=open(localpath,'wb')
ftp.retrbinary('RETR'+remotepath,fp.write,bufsize)
ftp.set_debuglevel(0)
fp.close()
#從本地上傳文件到ftp
defuploadfile(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")
#調用本地播放器播放下載的視頻
os.system('start"C:.exe""C:/Users/Administrator/Desktop/test.mp4"')
uploadfile(ftp,"C:/Users/Administrator/Desktop/test.mp4","test.mp4")
ftp.quit()
Ⅳ 用python寫測試腳本,從本地傳文件至ftp遠程路徑
轉自:http://news.tuxi.com.cn/kf/article/jhtdj.htm
本文實例講述了python實現支持目錄FTP上傳下載文件的方法。分享給大家供大家參考。具體如下:
該程序支持ftp上傳下載文件和目錄、適用於windows和linux平台。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classFTPSync(object):
conn=ftplib.FTP()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(False)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('LIST./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returnTrue
else:
returnFalse
exceptftplib.error_perm,e:
returnFalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=True
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=False
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=True
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('LIST%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路徑是目錄,下載文件到該目錄
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,但上層目錄存在,則按照本地路徑的文件名作為下載的文件名稱
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,且上層目錄不存在,則退出
else:
print'EROOR:Thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'EROOR:Theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果遠程路徑是個目錄,則上傳文件到這個目錄,文件名不變
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('STOR%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果遠程路徑的上層是個目錄,則上傳文件,文件名按照給定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'STOR%s'%ftp_path
self.conn.storbinary('STOR%s'%ftp_path,file_handler)
#如果遠程路徑不是目錄,且上一層的目錄也不存在,則提示給定遠程路徑錯誤
else:
print'EROOR:Theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'ERROR:Thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#當ftp目錄存在時下載
ifself._is_ftp_dir(ftp_path):
#如果下載到本地當前目錄下,並創建目錄
#下載初始化:如果給定的本地路徑不存在需要創建,同時將ftp的目錄存放在給定的本地目錄下。
#ftp目錄下文件存放的路徑為local_path=local_path+os.path.basename(ftp_path)
#例如:將ftp文件夾a下載到本地的a/b目錄下,則ftp的a目錄下的文件將下載到本地的a/b/a目錄下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目錄不存在,則創建目錄
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#進入ftp目錄,開始遞歸查詢
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False)
#如果fileftp路徑是文件則直接上傳文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,False)
else:
self.get_file(file,local_file)
#如果當前ftp目錄文件已經遍歷完畢返回上一層目錄
self.conn.cwd("..")
return
else:
print'ERROR:Thedir:%sisnotexist'%ftp_path
return
defput_dir(self,local_path,ftp_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#當本地目錄存在時上傳
ifos.path.isdir(local_path):
#上傳初始化:如果給定的ftp路徑不存在需要創建,同時將本地的目錄存放在給定的ftp目錄下。
#本地目錄下文件存放的路徑為ftp_path=ftp_path+os.path.basename(local_path)
#例如:將本地文件夾a上傳到ftp的a/b目錄下,則本地a目錄下的文件將上傳的ftp的a/b/a目錄下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路徑不是目錄,則創建目錄
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
#進入本地目錄,開始遞歸查詢
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為False)
#如果file本地路徑是文件則直接上傳文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,False)
else:
self.put_file(file,ftp_path)
#如果當前本地目錄文件已經遍歷完畢返回上一層目錄
os.chdir("..")
else:
print'ERROR:Thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=FTPSync('192.168.1.110')
ftp.login('test','test')
#上傳文件,不重命名
#ftp.put_file('111.txt','a/b')
#上傳文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下載文件,不重命名
#ftp.get_file('/a/111.txt',r'D:\')
#下載文件,重命名
#ftp.get_file('/a/111.txt',r'D:112.txt')
#下載到已經存在的文件夾
#ftp.get_dir('a/b/c',r'D:\a')
#下載到不存在的文件夾
#ftp.get_dir('a/b/c',r'D:\aa')
#上傳到已經存在的文件夾
ftp.put_dir('b','a')
#上傳到不存在的文件夾
ftp.put_dir('b','aa/B/')
希望本文所述對大家的Python程序設計有所幫助。
以下轉自:http://blog.csdn.net/linda1000/article/details/8255771
Python中的ftplib模塊
Python中默認安裝的ftplib模塊定義了FTP類,其中函數有限,可用來實現簡單的ftp客戶端,用於上傳或下載文件
FTP的工作流程及基本操作可參考協議RFC959
ftp登陸連接
from ftplib import FTP #載入ftp模塊
ftp=FTP() #設置變數
ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息
ftp.connect("IP","port") #連接的ftp sever和埠
ftp.login("user","password")#連接的用戶名,密碼
print ftp.getwelcome() #列印出歡迎信息
ftp.cmd("xxx/xxx") #更改遠程目錄
bufsize=1024 #設置的緩沖區大小
filename="filename.txt" #需要下載的文件
file_handle=open(filename,"wb").write #以寫模式在本地打開文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收伺服器上文件並寫入本地文件
ftp.set_debuglevel(0) #關閉調試模式
ftp.quit #退出ftp
ftp相關命令操作
ftp.cwd(pathname) #設置FTP當前操作的路徑
ftp.dir() #顯示目錄下文件信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠程目錄
ftp.delete(filename) #刪除遠程文件
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下載FTP文件
網上找到一個具體的例子:
#例:FTP編程
fromftplibimportFTP
ftp=FTP()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#連接FTP伺服器
ftp.login('UserName','888888')#登錄
printftp.getwelcome()#獲得歡迎信息
ftp.cwd('file/test')#設置FTP路徑
list=ftp.nlst()#獲得目錄列表
fornameinlist:
print(name)#列印文件名字
path='d:/data/'+name#文件保存路徑
f=open(path,'wb')#打開要保存文件
filename='RETR'+name#保存FTP文件
ftp.retrbinary(filename,f.write)#保存FTP上的文件
ftp.delete(name)#刪除FTP文件
ftp.storbinary('STOR'+filename,open(path,'rb'))#上傳FTP文件
ftp.quit()#退出FTP伺服器
完整的模板:
#!/usr/bin/python
#-*-coding:utf-8-*-
importftplib
importos
importsocket
HOST='ftp.mozilla.org'
DIRN='pub/mozilla.org/webtools'
FILE='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.FTP(HOST)
except(socket.error,socket.gaierror):
print'ERROR:cannotreach"%s"'%HOST
return
print'***Connectedtohost"%s"'%HOST
try:
f.login()
exceptftplib.error_perm:
print'ERROR:cannotloginanonymously'
f.quit()
return
print'***Loggedinas"anonymously"'
try:
f.cwd(DIRN)
exceptftplib.error_perm:
print'ERRORLcannotCDto"%s"'%DIRN
f.quit()
return
print'***Changedto"%s"folder'%DIRN
try:
#傳一個回調函數給retrbinary()它在每接收一個二進制數據時都會被調用
f.retrbinary('RETR%s'%FILE,open(FILE,'wb').write)
exceptftplib.error_perm:
print'ERROR:cannotreadfile"%s"'%FILE
os.unlink(FILE)
else:
print'***Downloaded"%s"toCWD'%FILE
f.quit()
return
if__name__=='__main__':
main()
Ⅵ FTP文件移動復制
使用FTP直接復制粘貼文件是無法操作。
FTP只是一種幫助讀取管理伺服器上文件的工具,可以通過FTP工具上傳、下載、刪除文件。如下圖所示:可以把伺服器上文件直接下載到本地,也可把本地文件上傳到伺服器。
Ⅶ python ftp連接指定伺服器,並下載指定文件
ftp客戶端一般只有顯示、上傳、下載,並沒有打開文件的操作,所以你得先下載相應配置文件,在本地解析後,再繼續用相關參數下載後續文件。
Ⅷ 如何將FTP遠端一個目錄下所有子目錄里的文件一次性移動到另外一個目錄中
我記得 ftp 有 mv 命令,
或者更簡單,你用 ftp 客戶端來實現比如 cute ftp等等
Ⅸ python怎麼實現管理ftp伺服器文件
1. 客戶端以隨機非特權埠N,就是大於1024的埠,對server端21埠發起連接
2. 客戶端開始監聽 N+1埠;
3. 服務端會主動以20埠連接到客戶端的N+1埠。
Ⅹ python ftplib 傳輸文件大小的文件,如何傳輸較大文件
沒有矛盾啊。只要你不一口氣將所有文件都載入到內存里去。使用FTP協議,發送大文件不成問題。
FTP協議是個很簡單的協議。你可以仔細看一下原理。然後再配合python的ftplib看。你會發現那些cmd就是FTP的命令。