源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python FTP操作类代码分享

  • 时间:2021-02-20 17:26 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python FTP操作类代码分享
[u]复制代码[/u] 代码如下:
#!/usr/bin/py2 # -*- coding: utf-8 -*- #encoding=utf-8 '''''     ftp自动下载、自动上传脚本,可以递归目录操作 '''  from ftplib import FTP import os, sys, string, datetime, time import socket   class FtpClient:     def __init__(self, host, user, passwd, remotedir, port=21):         self.hostaddr = host         self.username = user         self.password = passwd         self.remotedir  = remotedir                   self.port     = port         self.ftp      = FTP()         self.file_list = []       def __del__(self):         self.ftp.close()       def login(self):         ftp = self.ftp         try:             timeout = 60             socket.setdefaulttimeout(timeout)             ftp.set_pasv(True)             ftp.connect(self.hostaddr, self.port)             print 'Connect Success %s' %(self.hostaddr)             ftp.login(self.username, self.password)             print 'Login Success %s' %(self.hostaddr)             debug_print(ftp.getwelcome())         except Exception:             deal_error("Connect Error or Login Error")         try:             ftp.cwd(self.remotedir)         except(Exception):             deal_error('Change Directory Error')       def is_same_size(self, localfile, remotefile):         try:             remotefile_size = self.ftp.size(remotefile)         except:             remotefile_size = -1         try:             localfile_size = os.path.getsize(localfile)         except:             localfile_size = -1         debug_print('lo:%d  re:%d' %(localfile_size, remotefile_size),)         if remotefile_size == localfile_size:             return 1         else:             return 0     def download_file(self, localfile, remotefile):         if self.is_same_size(localfile, remotefile):             return         else:             pass         file_handler = open(localfile, 'wb')         self.ftp.retrbinary('RETR %s'%(remotefile), file_handler.write)         file_handler.close()     def download_files(self, localdir='./', remotedir='./'):         try:             self.ftp.cwd(remotedir)         except:             return         if not os.path.isdir(localdir):             os.makedirs(localdir)         self.file_list = []         self.ftp.dir(self.get_file_list)         remotenames = self.file_list         for item in remotenames:             filetype = item[0]             filename = item[1]             local = os.path.join(localdir, filename)             if filetype == 'd':                 self.download_files(local, filename)             elif filetype == '-':                 self.download_file(local, filename)         self.ftp.cwd('..')       def upload_file(self, localfile, remotefile):         if not os.path.isfile(localfile):             return         if self.is_same_size(localfile, remotefile):             return         file_handler = open(localfile, 'rb')         self.ftp.storbinary('STOR %s' %remotefile, file_handler)         file_handler.close()       def upload_files(self, localdir='./', remotedir = './'):         if not os.path.isdir(localdir):             return         localnames = os.listdir(localdir)         self.ftp.cwd(remotedir)         for item in localnames:             src = os.path.join(localdir, item)             if os.path.isdir(src):                 try:                     self.ftp.mkd(item)                 except:                     debug_print('Directory Exists %s' %item)                 self.upload_files(src, item)             else:                 self.upload_file(src, item)         self.ftp.cwd('..')     def mkdir(self, remotedir='./'):         try:             self.ftp.mkd(remotedir)         except:             debug_print('Directory Exists %s' %remotedir)     def get_file_list(self, line):         ret_arr = []         file_arr = self.get_filename(line)         if file_arr[1] not in ['.', '..']:             self.file_list.append(file_arr)     def get_filename(self, line):         pos = line.rfind(':')         while(line[pos] != ' '):             pos += 1         while(line[pos] == ' '):             pos += 1         file_arr = [line[0], line[pos:]]         return file_arr def debug_print(str):     print (str) def deal_error(e):     timenow  = time.localtime()     datenow  = time.strftime('%Y-%m-%d', timenow)     logstr = '%s Error: %s' %(datenow, e)     debug_print(logstr)     file.write(logstr)     sys.exit()
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部