• <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)計(jì)

            最新評(píng)論

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

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

            Python代碼  收藏代碼
            1. #!/usr/bin/python  
            2. #coding=gbk  
            3. ''''' 
            4.     ftp自動(dòng)下載、自動(dòng)上傳腳本,可以遞歸目錄操作 
            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ā)生錯(cuò)誤: %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   # 端口號(hào)   
            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 大龍 閱讀(2744) 評(píng)論(0)  編輯 收藏 引用


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


            亚洲午夜久久久久久噜噜噜| 综合久久国产九一剧情麻豆| 久久精品国产亚洲AV麻豆网站| 日韩人妻无码一区二区三区久久99 | 久久av免费天堂小草播放| 久久综合狠狠综合久久激情 | 国内精品久久久久久不卡影院 | 久久久久99这里有精品10 | 久久se精品一区精品二区国产| 99久久成人国产精品免费| 国产精品久久久久久影院| 中文字幕无码久久久| 99久久99久久| 久久综合亚洲色一区二区三区| 国产精品久久久久天天影视| 亚洲精品无码久久久久AV麻豆| 久久国产精品77777| 久久精品中文字幕大胸| 国内精品久久久久久野外| 97精品依人久久久大香线蕉97| 久久精品男人影院| 久久九九久精品国产免费直播| 久久久久四虎国产精品| 久久九九久精品国产免费直播| 韩国三级中文字幕hd久久精品 | 99久久精品国产免看国产一区| 青青青伊人色综合久久| 欧美国产成人久久精品| 亚洲国产成人久久综合一| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 高清免费久久午夜精品| 少妇人妻88久久中文字幕| 色偷偷91久久综合噜噜噜噜| 99久久国产热无码精品免费久久久久 | 2021精品国产综合久久| 欧美日韩精品久久久久| 久久av高潮av无码av喷吹| 久久久久久国产精品无码下载| 99久久国产免费福利| 99久久精品免费| 精品熟女少妇aⅴ免费久久|