资源简介

python实现的,借鉴的网上的代码,但修改并测试通过了。函数已经包装好。修改修改可用于各种场合。

资源截图

代码片段和文件信息

#!/usr/bin/python
#coding=gbk
‘‘‘
ftp自动下载、自动上传脚本,可以递归目录操作
‘‘‘

from ftplib import FTP
import ossysstringdatetimetime
import socket

class MYFTP:
def __init__(self hostaddr username password remotedir port=21):
self.hostaddr = hostaddr
self.username = username
self.password = password
self.remotedir  = remotedir
self.port     = port
self.ftp      = FTP()
self.file_list = []
# self.ftp.set_debuglevel(2)
def __del__(self):
self.ftp.close()
# self.ftp.set_debuglevel(0)
def login(self):
ftp = self.ftp
try: 
timeout = 60
socket.setdefaulttimeout(timeout)
ftp.set_pasv(True)
print ‘开始连接到 %s‘ %(self.hostaddr)
ftp.connect(self.hostaddr self.port)
print ‘成功连接到 %s‘ %(self.hostaddr)
print ‘开始登录到 %s‘ %(self.hostaddr)
ftp.login(self.username self.password)
print ‘成功登录到 %s‘ %(self.hostaddr)
debug_print(ftp.getwelcome())
except Exception:
deal_error(“连接或登录失败“)
try:
ftp.cwd(self.remotedir)
except(Exception):
deal_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):
  debug_print(‘%s 文件大小相同,无需下载‘ %localfile)
  return
else:
debug_print(‘>>>>>>>>>>>>下载文件 %s ... ...‘ %localfile)
#return
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:
debug_print(‘目录%s不存在,继续...‘ %remotedir)
return
if not os.path.isdir(localdir):
os.makedirs(localdir)
debug_print(‘切换至目录 %s‘ %self.ftp.pwd())
self.file_list = []
self.ftp.dir(self.get_file_list)
remotenames = self.file_list
#print(remotenames)
#return
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(‘..‘)
debug_print(‘返回上层目录 %s‘ %self.ftp.pwd())
def upload_file(self localfile remotefile):
if not os.path.isfile(localfile):
return
if self.is_same_size(localfile remotefile):
  debug_print(‘跳过[相等]: %s‘ %localfile)
  return
file_handler = open(localfile ‘rb‘)
self.ftp.storbinary(‘STOR %s‘ %remotefile file_handler)
file_handler.close()
debug_print(‘已传送: %s‘ %localfile)
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.pa

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4536  2010-12-08 18:01  autoftp\autoftp.py

     文件          0  2010-12-08 18:01  autoftp\log.txt

     文件         33  2010-12-08 17:54  autoftp\run.bat

     目录          0  2010-12-08 17:58  autoftp

----------- ---------  ---------- -----  ----

                 4569                    4


评论

共有 条评论