具体代码如下所示:
# - * -编码:utf - 8 - * ”“” ftp自动检测源文件夹的更新,将源文件夹更新的内容拷贝到目标文件夹中 使用树的层序遍历算法,支持深度目录拷贝 “‘ 进口操作系统 从ftplib进口FTP 导入系统,系统,字符串,日期时间,时间 进口shutil 进口套接字 类MyUpdateMonitor(对象): def __init__(自我,hostaddr,用户名、密码、remotedir_old remotedir_new,端口=21): 自我。hostaddr=hostaddr 自我。用户名=用户名 自我。密码=密码 自我。remotedir_old=remotedir_old 自我。remotedir_new=remotedir_new #自我。端口=端口 自我。ftp=ftp () #源文件文件队列 自我。FolderListOld=[] #目标文件文件队列 自我。FolderListNew=[] def __del__(自我): self.ftp.close () self.FolderListOld.clear () self.FolderListNew.clear () def FtpLogin(自我): ftp=self.ftp 试一试: 超时=300 socket.setdefaulttimeout(超时) ftp.set_pasv(真正的) 打印你的开始连接到% s的% (hostaddr) ftp.connect (hostaddr) 打印你的成功连接到% s的% (hostaddr) 打印你的开始登录到% s的% (hostaddr) ftp。登录(用户名、密码) 打印你的成功登录到% s的% (hostaddr) ftp.getwelcome () 除了例外,e: 打印:发现异常,e #使用树的层序遍历来检查文件目录 def LevelOrderFolder(自我): #新增文件起始位置和终止位置=0开始 结束=0 试一试: #将根目录放入队列中 self.FolderListOld.append (self.remotedir_old) self.FolderListNew.append (self.remotedir_new) 虽然不是(0==len (self.FolderListOld)): 结束=开始 #将文件夹下的文件全部压入队列 如果os.path.isdir (self.FolderListOld [0]): 文件=os.listdir (self.FolderListOld [0]) 文件的文件: self.FolderListOld.append (os.path.join(自我。FolderListOld[0]、文件) #确定新增文件在队列中的位置 +=结束len(文件) #将已经查看的文件夹删除 德尔self.FolderListOld [0] #检查目标文件夹该级目录 如果os.path.isdir (self.FolderListNew [0]): #将该级目录的文件都列出 文件=os.listdir (self.FolderListNew [0]) #检查源文件该级目录下的文件在目标该级目录下是否有 文件在self.FolderListOld[开始:结束): temp=file.split (“\ \”) 如果临时文件[1]: #这里判断文件大小是否一致,不一致拷过去 如果os.path.isfile(文件),而不是os.path.getsize(文件)==os.path.getsize (os.path.join(自我。FolderListNew[0],临时[1])): 打印的找到文件(% s)大小改变了!文件\ n ' % #打印r 'Start删除。\ n ' # os.remove (os.path.join(自我。FolderListNew[0],临时[1])) #打印r 'delete结束…\ n ' 打印“开始复制。\ n” shutil。拷贝文件(文件,os.path.join(自我。FolderListNew[0],临时[1])) 打印“复制/璡 n” # #如果是文件夹存在,但是修改过,没有必要全部拷贝文件夹,可以到文件夹中拷贝单个文件 #如果os.path.isfile(文件),而不是(os.path.getmtime(文件)==os.path.getmtime (os.path.join(自我。FolderListNew[0],临时[1]))): #打印'找到文件(% s)大小改变了!文件\ n ' % # changetime=os.path.getmtime(文件)#以毫秒为单位的时间,自1970年开始到现今 # changetime=浮动(changetime) #印刷改变时间,时间。strftime (“% Y - % m - H % d %: % m: % S的,time.gmtime (changetime)), r ' \ n ' # #打印“开始复制。\ n” # shutil。拷贝文件(文件,os.path.join(自我。FolderListNew[0],临时[1])) #打印“复制/璡 n” 其他: 如果os.path.isdir(文件): #如果是文件夹不存在使用,目录树拷贝 打印”找到的文件夹(% s)更新!文件\ n ' % 打印“开始复制。\ n” shutil。copytree(文件,os.path.join(自我。FolderListNew[0],临时[1])) 打印“复制/璡 n” 其他: #如果是文件 打印的找到文件(% s)更新!文件\ n ' % 打印“开始复制。\ n” shutil。拷贝文件(文件,os.path.join(自我。FolderListNew[0],临时[1])) 打印“复制/璡 n” self.FolderListNew.append (os.path.join(自我。FolderListNew[0],临时[1])) 德尔self.FolderListNew [0] 开始=- 1结束 除了例外,e: 打印:发现异常,e if __name__==癬_main__”: #配置如下变量 hostaddr=r ' 10.204.16.28 # ftp地址 用户名=r ' #用户名 密码=r ' #密码 remotedir_old=r ' \ \ 10.204.16.28 \ \旧TDME \测试\ \ TMUMH_1.6.1055回家的 remotedir_new=r ' \ \ 10.204.16.28 \家庭\ TDME \ \新\ TMUMH_1.6.1055测试” monitorfileupdae=MyUpdateMonitor (hostaddr、用户名、密码、remotedir_old remotedir_new) monitorfileupdae.FtpLogin () 而真正的: 打印“开始检查更新…\ n” monitorfileupdae.LevelOrderFolder () 打印的检查更新……一小时\ tSleep……” time . sleep (3600) 打印“你好”Python FTP两个文件夹间的同步实例代码