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

大龍的博客

常用鏈接

統計

最新評論

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>
            久久免费黄色| 美女视频黄免费的久久| 欧美一区二区三区在线观看视频| 亚洲免费精彩视频| 日韩午夜视频在线观看| 日韩一级黄色大片| 一二三区精品福利视频| 一区二区三区高清不卡| 午夜精品久久| 美女91精品| 亚洲精品中文字幕女同| 亚洲一区二区日本| 久久精品国产一区二区三区| 老牛影视一区二区三区| 欧美日韩色一区| 国产视频欧美视频| 亚洲精品1区2区| 亚洲免费在线播放| 老司机凹凸av亚洲导航| 日韩视频免费| 久久精品国产亚洲5555| 欧美精品免费在线| 国产一区久久| 亚洲视频在线观看| 欧美成人a视频| 亚洲欧美视频在线观看| 欧美激情综合网| 激情国产一区| 亚洲欧美日韩专区| 亚洲国产精品成人va在线观看| 日韩视频免费观看高清在线视频| 欧美在线观看视频一区二区| 欧美日本免费| 亚洲大片一区二区三区| 小黄鸭精品密入口导航| 亚洲国产成人精品视频| 欧美一级视频精品观看| 欧美色中文字幕| 亚洲精品久久7777| 麻豆亚洲精品| 欧美一区二区私人影院日本| 国产精品国产三级国产专播精品人| 亚洲激情视频在线播放| 久久五月激情| 午夜影院日韩| 国产精品一区二区三区成人| 亚洲视频999| 亚洲乱码视频| 欧美精品一区二区三区在线播放 | 国产亚洲精品激情久久| 9色porny自拍视频一区二区| 久久在线免费观看| 午夜影院日韩| 国产午夜精品一区二区三区欧美 | 国产精品毛片大码女人| 最近中文字幕日韩精品| 毛片av中文字幕一区二区| 欧美一二三区在线观看| 国产嫩草一区二区三区在线观看| 91久久久久| 亚洲人体1000| 欧美日韩在线不卡一区| 99热免费精品| 99视频国产精品免费观看| 欧美巨乳波霸| 亚洲网站在线看| 日韩亚洲国产精品| 欧美日韩激情小视频| 中国女人久久久| 亚洲线精品一区二区三区八戒| 欧美香蕉视频| 亚洲伊人观看| 欧美一级在线视频| 亚洲大胆av| 亚洲黑丝一区二区| 欧美日韩亚洲一区| 欧美一级在线播放| 欧美一区二区三区免费视| 禁久久精品乱码| 亚洲第一在线综合在线| 欧美精彩视频一区二区三区| 亚洲免费在线视频| 久久国产黑丝| 亚洲精品国偷自产在线99热| 中文国产一区| 亚洲福利小视频| 亚洲天堂网站在线观看视频| 韩国av一区二区三区在线观看 | 亚洲网站啪啪| 黄网站免费久久| 亚洲免费大片| 精品99一区二区三区| 99re热这里只有精品免费视频| 国产日韩欧美在线播放不卡| 欧美国产激情| 国产精品视频1区| 亚洲电影免费观看高清| 国产精品一区二区你懂的| 亚洲国产精品一区二区www| 国产精品天美传媒入口| 亚洲福利在线看| 国产亚洲精品资源在线26u| 亚洲欧洲日本一区二区三区| 国产日本欧美视频| 亚洲精品久久久久久久久久久久久| 国产精品尤物| 亚洲激情社区| 激情小说另类小说亚洲欧美| 中文av字幕一区| 亚洲欧洲精品一区二区精品久久久 | 一区二区三区日韩精品视频| 亚洲国产经典视频| 亚洲欧美欧美一区二区三区| 伊人婷婷欧美激情| 亚洲无毛电影| 日韩午夜电影| 美脚丝袜一区二区三区在线观看| 欧美一级视频精品观看| 欧美日本二区| 亚洲国产美女精品久久久久∴| 国内外成人在线视频| 亚洲欧美一区二区三区久久| 亚洲视频在线观看三级| 欧美日韩第一区| 亚洲激精日韩激精欧美精品| 亚洲大胆人体视频| 久久久久国产精品麻豆ai换脸| 久久国产88| 国产日韩一区二区| 性色av一区二区三区红粉影视| 午夜精品久久久久久99热| 国产精品久久国产精麻豆99网站| 亚洲精选中文字幕| 一区二区动漫| 欧美午夜www高清视频| 一区二区免费在线播放| 亚洲一区久久久| 国产精品视频在线观看| 亚洲一区二区三区在线看| 欧美一区二区三区四区在线观看地址 | 狠狠久久亚洲欧美| 久久精品亚洲一区二区三区浴池| 久久激情五月激情| 国内久久婷婷综合| 久久久噜噜噜久久中文字幕色伊伊| 久久综合伊人77777| 精品不卡一区| 欧美刺激性大交免费视频| 91久久精品国产91久久性色tv| 亚洲精品女人| 国产精品久久久久天堂| 午夜精品久久| 蜜桃久久av| 日韩一级不卡| 国产精品热久久久久夜色精品三区| 一区二区欧美精品| 久久精品视频免费播放| 亚洲黄网站在线观看| 欧美成人一品| 亚洲午夜女主播在线直播| 久久久久这里只有精品| 亚洲全黄一级网站| 欧美性一二三区| 久久久久久午夜| 亚洲九九爱视频| 久久亚洲综合色| 亚洲视频第一页| 狠狠色综合网站久久久久久久| 欧美va天堂在线| 亚洲视频电影在线| 欧美成ee人免费视频| 亚洲欧美日本国产专区一区| 极品中文字幕一区| 国产精品久久国产三级国电话系列| 欧美在线日韩在线| 亚洲看片网站| 欧美视频在线免费| 亚洲国产精品久久久久秋霞影院| 亚洲免费网站| 亚洲国产小视频| 国产乱码精品一区二区三区不卡| 欧美a级理论片| 香蕉精品999视频一区二区| 亚洲国产三级在线| 久久久成人网| 亚洲欧美成人网| 亚洲精品国产拍免费91在线| 国产一区二区高清| 国产精品久久久久一区| 欧美成在线观看| 久久影视精品| 欧美在线视频一区二区| 在线一区日本视频| 亚洲精品日韩精品| 欧美激情精品久久久久久蜜臀| 久久久久九九视频| 欧美一区中文字幕| 香港久久久电影| 亚洲欧美日韩成人| 在线亚洲免费|