• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            python實(shí)現(xiàn)的ftp自動上傳下載程序(支持目錄遞歸操作)----轉(zhuǎn)

            因?yàn)閜ython腳本可以直接用文本工具打開修改,所以沒有設(shè)置參數(shù)。使用的時候直接修改掉main中的連接下載參數(shù)即可。 
            修改一下,可以用來備份網(wǎng)站上的圖片,數(shù)據(jù)庫什么的。 

            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不存在,繼續(xù)...' %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 發(fā)生錯誤: %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 = './'          # 遠(yuǎn)程目錄  
            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 成功執(zhí)行了備份\n" %datenow  
            164.     debug_print(logstr)  
            165.       
            166.     file.write(logstr)  
            167.     file.close()  

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


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            97久久精品无码一区二区| 狠狠狠色丁香婷婷综合久久俺| 久久久久国产一级毛片高清版| 久久午夜福利无码1000合集| 精品久久久久久无码人妻热| 99久久综合国产精品二区| 久久久精品一区二区三区| 久久久青草青青亚洲国产免观| 人妻精品久久久久中文字幕69| 国产69精品久久久久APP下载 | 亚洲精品白浆高清久久久久久| 亚洲精品视频久久久| 三级韩国一区久久二区综合 | 国产欧美久久久精品影院| 亚洲国产精品综合久久网络| 人妻丰满?V无码久久不卡| 欧美一级久久久久久久大| 亚洲国产精品嫩草影院久久| 久久久久久综合网天天| 麻豆成人久久精品二区三区免费| 狠狠色丁香久久婷婷综合| 久久精品国产亚洲AV高清热| 99国产欧美精品久久久蜜芽| 久久91综合国产91久久精品| 97久久精品人人做人人爽| 亚洲国产成人久久综合野外| 久久99久久99精品免视看动漫| 人妻精品久久无码专区精东影业| 国产精品久久成人影院| 久久99精品久久久久久不卡| 久久天天躁夜夜躁狠狠| jizzjizz国产精品久久| 久久国产精品波多野结衣AV| 久久精品免费全国观看国产| 99久久精品午夜一区二区| 国产成人久久精品区一区二区| 久久99国产一区二区三区| 国产精品久久久久蜜芽| 国产亚洲欧美精品久久久| 久久精品国产一区二区三区不卡 | 久久亚洲精品国产精品|