青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

python實現的ftp自動上傳下載程序(支持目錄遞歸操作)----轉

因為python腳本可以直接用文本工具打開修改,所以沒有設置參數。使用的時候直接修改掉main中的連接下載參數即可。 
修改一下,可以用來備份網站上的圖片,數據庫什么的。 

Python代碼  收藏代碼
  1. #!/usr/bin/python  
  2. #coding=gbk  
  3. ''''' 
  4.     ftp自動下載、自動上傳腳本,可以遞歸目錄操作 
  5. '''  
  6.   
  7. from ftplib import FTP  
  8. import os,sys,string,datetime,time  
  9. import socket  
  10.   
  11. class MYFTP:  
  12.     def __init__(self, hostaddr, username, password, remotedir, port=21):  
  13.         self.hostaddr = hostaddr  
  14.         self.username = username  
  15.         self.password = password  
  16.         self.remotedir  = remotedir  
  17.         self.port     = port  
  18.         self.ftp      = FTP()  
  19.         self.file_list = []  
  20.         # self.ftp.set_debuglevel(2)  
  21.     def __del__(self):  
  22.         self.ftp.close()  
  23.         # self.ftp.set_debuglevel(0)  
  24.     def login(self):  
  25.         ftp = self.ftp  
  26.         try:   
  27.             timeout = 60  
  28.             socket.setdefaulttimeout(timeout)  
  29.             ftp.set_pasv(True)  
  30.             print '開始連接到 %s' %(self.hostaddr)  
  31.             ftp.connect(self.hostaddr, self.port)  
  32.             print '成功連接到 %s' %(self.hostaddr)  
  33.             print '開始登錄到 %s' %(self.hostaddr)  
  34.             ftp.login(self.username, self.password)  
  35.             print '成功登錄到 %s' %(self.hostaddr)  
  36.             debug_print(ftp.getwelcome())  
  37.         except Exception:  
  38.             deal_error("連接或登錄失敗")  
  39.         try:  
  40.             ftp.cwd(self.remotedir)  
  41.         except(Exception):  
  42.             deal_error('切換目錄失敗')  
  43.   
  44.     def is_same_size(self, localfile, remotefile):  
  45.         try:  
  46.             remotefile_size = self.ftp.size(remotefile)  
  47.         except:  
  48.             remotefile_size = -1  
  49.         try:  
  50.             localfile_size = os.path.getsize(localfile)  
  51.         except:  
  52.             localfile_size = -1  
  53.         debug_print('lo:%d  re:%d' %(localfile_size, remotefile_size),)  
  54.         if remotefile_size == localfile_size:  
  55.             return 1  
  56.         else:  
  57.             return 0  
  58.     def download_file(self, localfile, remotefile):  
  59.         if self.is_same_size(localfile, remotefile):  
  60.             debug_print('%s 文件大小相同,無需下載' %localfile)  
  61.             return  
  62.         else:  
  63.             debug_print('>>>>>>>>>>>>下載文件 %s ... ...' %localfile)  
  64.         #return  
  65.         file_handler = open(localfile, 'wb')  
  66.         self.ftp.retrbinary('RETR %s'%(remotefile), file_handler.write)  
  67.         file_handler.close()  
  68.   
  69.     def download_files(self, localdir='./', remotedir='./'):  
  70.         try:  
  71.             self.ftp.cwd(remotedir)  
  72.         except:  
  73.             debug_print('目錄%s不存在,繼續...' %remotedir)  
  74.             return  
  75.         if not os.path.isdir(localdir):  
  76.             os.makedirs(localdir)  
  77.         debug_print('切換至目錄 %s' %self.ftp.pwd())  
  78.         self.file_list = []  
  79.         self.ftp.dir(self.get_file_list)  
  80.         remotenames = self.file_list  
  81.         #print(remotenames)  
  82.         #return  
  83.         for item in remotenames:  
  84.             filetype = item[0]  
  85.             filename = item[1]  
  86.             local = os.path.join(localdir, filename)  
  87.             if filetype == 'd':  
  88.                 self.download_files(local, filename)  
  89.             elif filetype == '-':  
  90.                 self.download_file(local, filename)  
  91.         self.ftp.cwd('..')  
  92.         debug_print('返回上層目錄 %s' %self.ftp.pwd())  
  93.     def upload_file(self, localfile, remotefile):  
  94.         if not os.path.isfile(localfile):  
  95.             return  
  96.         if self.is_same_size(localfile, remotefile):  
  97.             debug_print('跳過[相等]: %s' %localfile)  
  98.             return  
  99.         file_handler = open(localfile, 'rb')  
  100.         self.ftp.storbinary('STOR %s' %remotefile, file_handler)  
  101.         file_handler.close()  
  102.         debug_print('已傳送: %s' %localfile)  
  103.     def upload_files(self, localdir='./', remotedir = './'):  
  104.         if not os.path.isdir(localdir):  
  105.             return  
  106.         localnames = os.listdir(localdir)  
  107.         self.ftp.cwd(remotedir)  
  108.         for item in localnames:  
  109.             src = os.path.join(localdir, item)  
  110.             if os.path.isdir(src):  
  111.                 try:  
  112.                     self.ftp.mkd(item)  
  113.                 except:  
  114.                     debug_print('目錄已存在 %s' %item)  
  115.                 self.upload_files(src, item)  
  116.             else:  
  117.                 self.upload_file(src, item)  
  118.         self.ftp.cwd('..')  
  119.   
  120.     def get_file_list(self, line):  
  121.         ret_arr = []  
  122.         file_arr = self.get_filename(line)  
  123.         if file_arr[1not in ['.''..']:  
  124.             self.file_list.append(file_arr)  
  125.               
  126.     def get_filename(self, line):  
  127.         pos = line.rfind(':')  
  128.         while(line[pos] != ' '):  
  129.             pos += 1  
  130.         while(line[pos] == ' '):  
  131.             pos += 1  
  132.         file_arr = [line[0], line[pos:]]  
  133.         return file_arr  
  134. def debug_print(s):  
  135.     print (s)  
  136. def deal_error(e):  
  137.     timenow  = time.localtime()  
  138.     datenow  = time.strftime('%Y-%m-%d', timenow)  
  139.     logstr = '%s 發生錯誤: %s' %(datenow, e)  
  140.     debug_print(logstr)  
  141.     file.write(logstr)  
  142.     sys.exit()  
  143.   
  144. if __name__ == '__main__':  
  145.     file = open("log.txt""a")  
  146.     timenow  = time.localtime()  
  147.     datenow  = time.strftime('%Y-%m-%d', timenow)  
  148.     logstr = datenow  
  149.     # 配置如下變量  
  150.     hostaddr = 'localhost' # ftp地址  
  151.     username = 'test' # 用戶名  
  152.     password = 'test' # 密碼  
  153.     port  =  21   # 端口號   
  154.     rootdir_local  = '.' + os.sep + 'bak/' # 本地目錄  
  155.     rootdir_remote = './'          # 遠程目錄  
  156.       
  157.     f = MYFTP(hostaddr, username, password, rootdir_remote, port)  
  158.     f.login()  
  159.     f.download_files(rootdir_local, rootdir_remote)  
  160.       
  161.     timenow  = time.localtime()  
  162.     datenow  = time.strftime('%Y-%m-%d', timenow)  
  163.     logstr += " - %s 成功執行了備份\n" %datenow  
  164.     debug_print(logstr)  
  165.       
  166.     file.write(logstr)  
  167.     file.close()  

posted on 2011-12-14 11:15 大龍 閱讀(2754) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久婷婷人人澡人人喊人人爽| 久久精品中文字幕一区| 亚洲区第一页| 国产精品一区视频网站| 欧美精品一区二区三区蜜臀| 久久精品女人的天堂av| 欧美一区二区女人| 久久精品在线免费观看| 久久国产精品久久w女人spa| 久久精品日产第一区二区三区| 欧美亚洲视频一区二区| 久久精品欧美日韩| 欧美日韩18| 国产伦精品一区二区三区在线观看 | 久久er精品视频| 久久福利电影| 亚洲欧洲在线播放| 99亚洲视频| 久久久www免费人成黑人精品 | 国产精品福利网| 国产女主播一区| 亚洲电影专区| 欧美一区二区久久久| 亚洲国产精品高清久久久| 亚洲视频欧洲视频| 欧美www视频| 欧美日韩在线一二三| 伊人成人在线视频| 91久久综合亚洲鲁鲁五月天| 一区二区三区精密机械公司 | 久久久女女女女999久久| 亚洲第一区中文99精品| 99国产精品久久久久久久成人热| 性久久久久久久| 欧美日韩第一区| 在线色欧美三级视频| 欧美亚洲免费在线| 欧美激情五月| 久久精品电影| 国产精品视频大全| 一本大道久久a久久精品综合| 久久手机精品视频| 亚洲免费影视第一页| 欧美三级免费| 日韩午夜电影| 欧美激情一区二区三区全黄 | 日韩视频免费观看高清在线视频| 久久久99久久精品女同性| 夜夜爽av福利精品导航| 欧美大片免费观看在线观看网站推荐| 国内外成人在线| 欧美一区二区成人6969| 一区二区三区四区蜜桃| 欧美日韩www| 中文日韩在线视频| 亚洲精品网址在线观看| 欧美精品粉嫩高潮一区二区 | 国产精品高清网站| 一区二区欧美日韩| 亚洲人成在线免费观看| 欧美国产日韩免费| 日韩天天综合| 一本到高清视频免费精品| 欧美精品三级| 黄色成人精品网站| 久久久久久久久久久久久女国产乱 | 亚洲国产欧美一区| 欧美高清自拍一区| 日韩亚洲欧美高清| 99在线精品观看| 国产精品理论片在线观看| 亚洲欧美日韩成人| 亚洲欧美日韩综合| 一区二区三区四区五区精品视频| 欧美区一区二| 亚洲一区二区三区国产| 亚洲一本大道在线| 国产日韩精品在线| 美女亚洲精品| 欧美大学生性色视频| 在线视频欧美一区| 亚洲综合精品一区二区| 国内精品久久久久影院色| 巨胸喷奶水www久久久免费动漫| 麻豆成人在线| 亚洲视频中文| 欧美在线啊v| 日韩午夜中文字幕| 亚洲嫩草精品久久| 免费在线成人| 亚洲视频中文| 久久精品中文字幕一区二区三区| 亚洲电影下载| 亚洲精品欧洲精品| 国产美女诱惑一区二区| 欧美国产精品专区| 欧美成人a视频| 久久精品国产一区二区三| 久久九九精品| 一二三区精品福利视频| 亚洲深夜激情| 久久久久久久国产| 国产欧美日韩| 一本到12不卡视频在线dvd | 亚洲一区欧美| 亚洲国产高清自拍| 鲁大师影院一区二区三区| 久久久久88色偷偷免费| 99av国产精品欲麻豆| 国产精品夜夜嗨| 欧美黄色aaaa| 国产欧美精品日韩精品| 亚洲欧洲精品一区二区三区不卡 | 亚洲激情自拍| 香蕉久久国产| 亚洲一区二区三区精品动漫| 久久在线免费| 久久高清福利视频| 国产精品xxxxx| 亚洲黄色尤物视频| 亚洲第一福利视频| 欧美中文字幕视频在线观看| 亚洲一区在线播放| 欧美激情1区2区3区| 欧美99久久| 国产婷婷色一区二区三区在线| 一区二区三区国产精华| 日韩视频在线一区二区| 久久久青草婷婷精品综合日韩| 欧美在线视频观看| 国产精品一级| 亚洲欧美日韩精品久久| 午夜精品国产更新| 国产精品成人一区| 亚洲毛片一区二区| 一区二区高清在线观看| 欧美国产综合一区二区| 欧美成人一区二区在线 | 一区二区视频免费在线观看| 亚洲免费中文字幕| 亚洲欧美视频在线观看视频| 欧美视频一区二区三区在线观看 | 久久综合久久综合久久| 另类图片国产| 在线欧美日韩精品| 男女视频一区二区| 亚洲精品国产精品国自产观看浪潮 | 美女网站久久| 欧美黄色aaaa| 99国产精品久久| 欧美日韩高清区| 在线亚洲一区二区| 性欧美xxxx大乳国产app| 国产婷婷色一区二区三区在线| 久久精品麻豆| 亚洲激情国产精品| 亚洲一区二区欧美| 国产日韩欧美电影在线观看| 久久国产精品99久久久久久老狼 | 欧美在线观看你懂的| 国产性天天综合网| 久久久91精品国产| 91久久久亚洲精品| 亚洲女性喷水在线观看一区| 国产一区二区三区的电影| 开心色5月久久精品| 亚洲免费观看高清在线观看| 中文有码久久| 国产一区二区三区日韩| 麻豆精品视频| 欧美在线国产| 在线日韩一区二区| 国产私拍一区| 久久久久久亚洲综合影院红桃 | 亚洲国产日本| 亚洲一区二区三区国产| 狠狠色狠狠色综合系列| 女仆av观看一区| 亚洲午夜在线视频| 美女999久久久精品视频| 欧美日韩综合一区| 午夜视频久久久久久| 亚洲国产成人在线视频| 亚洲美女在线看| 国产一区二区三区在线观看视频 | 欧美a级一区| 亚洲欧美日韩一区二区三区在线| 久热这里只精品99re8久| 亚洲色诱最新| 136国产福利精品导航| 欧美午夜电影在线观看| 久久久久久久久久看片| 亚洲影视在线| 亚洲美女av在线播放| 男男成人高潮片免费网站| 欧美一级在线视频| 亚洲色在线视频| 日韩一级精品| 亚洲人成久久| 亚洲第一福利视频|