當前位置:首頁 » 文件傳輸 » python同步FTP文件到本地盤
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

python同步FTP文件到本地盤

發布時間: 2023-02-15 13:51:08

❶ python可以同步本地磁碟文件的字典

是的,Python可以使用os模塊的walk函數來同步本地磁碟文件夾中的字典。walk函數會返回一個三元組(root,dirs,files),這個三元組包含根目錄、子目錄和遞歸遍歷的文件列表,可以組成一個字典,將文件根據它們所屬的文件夾來歸類。

❷ 用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文件與本地文件的同步

你操作系統什麼系統? 如果還是Linux ro linux , 可以用rsync, 調用crontab 定時任務來完成。

❹ 如何將FTP中的一個文件夾同步到本地

你是備份網站吧?用同步軟體吧,這樣實現起來比較穩定。
我現在覺得比較好用的是BestSync2011同步軟體,功能比較全,而且實現起來比較簡單。
你可以去網上搜搜。

來個簡單的小例:
1. 你本地裝上軟體以後,在主菜單裡面 編輯-->追加任務

文件夾1選擇 驅動盤中要備份的文件夾位置
文件夾2選擇 選擇FTP(填寫路徑)

同步方向為 文件夾2 --》文件夾1
在 FTP設定 下面填寫伺服器地址,賬戶名,密碼等信息)

然後選擇 完成 按鈕

2. 重復1步驟,繼續建立其他FTP的同步任務

3. 在主界面下,選中任務列表中所有任務(勾復選框),點擊「>>」菜單圖標,啟動所有選中任務

這樣就能實現一次備份多個FTP站點,它可以多個FTP Session快速下載大文件以減少下載時間。 也可以同時下載(多線程)多個小文件,提高下載速度。

你只需要在建立多個任務,每個任務鏈接到一個FTP地址,然後再主界面下,勾選所有同步任務,點選 開始 按鈕,就一起同步了。。。

BestSync有快速掃描功能(同時掃描多個文件夾以減少准備時間),N個小文件掃描也很費時間的。這個功能很有用

❺ python 實現復制粘貼文件後 打包壓縮 並連接FTP自動上傳到FTP指定目錄下

直接用批處理行了

❻ 怎麼把FTP伺服器上的資料庫取出放到本地上

1、FTP客戶端准確的連接伺服器,IP,埠,賬號,密碼。
2、選好本地想要保存的目的位置。
3、FTP伺服器允許下載。。。
4、只要選擇文件,滑鼠選中直接拖放到本地硬碟文件夾內即可。

❼ 求幫忙寫個python的FTP小腳本或者批處理,復制文件到多個文件夾

有幾個辦法
1.如果是linux,用scp,最簡單。
2.如果是windows,用共享文件夾最簡單,共享完後,復制就可以
3.在目標伺服器上弄一個服務,可以是FTP也可以是自己定義的socketserver。自己做服務端,也做客戶端。這樣許可權比較大。
4.在目錄伺服器上安裝一個標準的ftp伺服器。然後客戶端用python,使用ftplib

具體的用法。你自己去試驗。不會花多少時間。1個小時就弄好了。
先是使用ftp的CD命令到指定的目錄。然後是使用PUT命令上傳文件。

不過如果是方法4,而a,b,c又不是在同一個父目錄下,可能會有許可權問題。

❽ 如何把FTP空間映射到電腦裡面的一個盤

安裝ftpnetdriver第一步:下載FTPNetDrive主程序並運行出現安裝界面,我們點NEXT按鈕繼續。(如圖9)

第二步:同意軟體安裝許可協議,然後系統復制必須文件到本地硬碟。(如圖10)

第三步:完成全部安裝工作點「完成」按鈕關閉安裝向導窗口。(如圖11)

第四步:接下來我們會在桌面看到一個NetDrive圖標,運行該圖標打開NetDrive主程序,全部界面都是英文的。NetDrive雖是一款英文軟體,不過使用非常簡單,基本操作在主窗口中即可完成。它採用了傳統的三欄式窗口布局,窗口上方是功能選項按鈕,左側為站點列表,右側為對應站點的選項設置區。普通用戶只需要按照下面的步驟操作即可。

設置ftp映射到電腦盤符

點擊「New Site」按鈕增加新的站點,例如:「我的FTP」。接下來在右側選項設置區中進行參數設置。

NetDrive中的設置項目同專業FTP工具並無二致,它甚至也支持SSL加密及代理伺服器功能,下面我們一一做對應說明。
Site name:站點名稱。
Site IP or URL:站點IP或者網址。
Port:埠,一般保持默認值21即可。
Server Type:伺服器類型,軟體支持FTP和WebDav兩種網路協議,一般選擇FTP。
Drive:驅動器,在這里設置NetDrive虛擬的驅動器盤符,本例選擇「H盤」。
Connect as anonymous:以匿名方式登錄。
Account/Password:用戶名/密碼。
Save password:保存密碼。
Automatic login when system starts:系統開機後自動登錄。撥號用戶不建議勾選,除非你的網路始終在線。
Automatic login when NetDrive starts:NetDrive啟動後自動登錄。
完成上述設置後,點擊「Save」保存設置,點擊「Connect」生成虛擬磁碟。

❾ 如何把FTP中的文件復制到本地文件夾

把伺服器上面的文件復制到本地有多種方法:
一.在伺服器上面安裝FTP服務端,通常是可以讓服務商幫你安裝的.然後在本地電腦上安裝flashfxp工具.用該工具登錄FTP並把伺服器上面的數據下載到本地電腦.
二.在本地電腦點開始-運行.輸入mstsc按確定.在彈出的窗口出點選項-點"本地資源"-點"詳細信息".把本地磁碟前面的方框勾選上.然後再連接伺服器.登錄伺服器以後打開"我的電腦".在裡面可以訪問到你本地電腦的磁碟分區.直接把伺服器磁碟上的內容復制到本地電腦磁碟即可.
三.登錄伺服器.把上面需要復制的內容打壓縮包.然後通過發郵箱附件的功能把壓縮包發到你的另一個郵箱.然後在本地電腦登錄收件的郵箱.並把附件下載到本地電腦即可.

❿ 用python實現FTP功能

開發環境:

1、操作系統: Windows 10 X64

2、Pycharm 2020.2.1

新建項目後,創建兩個包 ftp_client與ftp_server,分別代表客戶端與服務端。

該項目的完成主要藉助了python提供的socketserver庫來進行連接。

本項目實現了客戶端對於服務端D://文件夾的增加文件,刪除文件,修改文件功能。分別以put,delete,modify表示。

對於client,實現了最基礎的交互功能,用戶可以用如put test.txt等命令來實現功能。修改文件,用戶首先輸入modify z.txt 命令,z.txt是D://文件夾中已經存在的文件,再根據提示,輸入想修改的內容即可修改成功。

在這一模塊中,將重點介紹我在實現項目的過程中遇到的問題。

1、bytes與str的轉換,傳輸以位元組流進行,但是輸出部分內容要以str形式,注意轉換

2、熟悉python的語法

3、熟悉文件相關操作

4、考慮傳輸文件過大的情況

該問題不影響項目的正常使用,但未找到較好的解決辦法