Python FTP两个文件夹间的同步实例代码

具体代码如下所示:

# -*- coding: utf-8 -*-
'''''''
  ftp自动检测源文件夹的更新,将源文件夹更新的内容拷贝到目标文件夹中
  使用树的层序遍历算法,支持深度目录拷贝
'''
import os
from ftplib import FTP
import os,sys,string,datetime,time
import shutil
import socket
class MyUpdateMonitor(object):
  def __init__(self, hostaddr, username, password, remotedir_old, remotedir_new, port = 21):
    self.hostaddr = hostaddr
    self.username = username
    self.password = password
    self.remotedir_old = remotedir_old
    self.remotedir_new = remotedir_new
    # self.port = port
    self.ftp = FTP()
    # 源文件文件队列
    self.FolderListOld = []
    # 目标文件文件队列
    self.FolderListNew = []
  def __del__(self):
    self.ftp.close()
    self.FolderListOld.clear()
    self.FolderListNew.clear()
  def FtpLogin(self):
    ftp = self.ftp
    try:
      timeout = 300
      socket.setdefaulttimeout(timeout)
      ftp.set_pasv(True)
      print u'开始连接到 %s' %(hostaddr)
      ftp.connect(hostaddr)
      print u'成功连接到 %s' %(hostaddr)
      print u'开始登录到 %s' %(hostaddr)
      ftp.login(username, password)
      print u'成功登录到 %s' %(hostaddr)
      ftp.getwelcome()
    except Exception, e:
      print 'find exception now:',e
  # 使用树的层序遍历来检查文件目录
  def LevelOrderFolder(self):
    # 新增文件起始位置和终止位置
    start = 0
    end = 0
    try:
      # 将根目录放入队列中
      self.FolderListOld.append(self.remotedir_old)
      self.FolderListNew.append(self.remotedir_new)
      while not (0 == len(self.FolderListOld)):
        end = start
        # 将文件夹下的文件全部压入队列
        if os.path.isdir(self.FolderListOld[0]):
          files = os.listdir(self.FolderListOld[0])
          for file in files:
            self.FolderListOld.append(os.path.join(self.FolderListOld[0], file))
          # 确定新增文件在队列中的位置
          end += len(files)
        # 将已经查看的文件夹删除
        del self.FolderListOld[0]
        # 检查目标文件夹该级目录
        if os.path.isdir(self.FolderListNew[0]):
          # 将该级目录的文件都列出
          files = os.listdir(self.FolderListNew[0])
          # 检查源文件该级目录下的文件在目标该级目录下是否有
          for file in self.FolderListOld[start:end]:
            temp = file.split('\\')
            if temp[-1] in files:
              # 这里判断文件大小是否一致,不一致拷过去
              if os.path.isfile(file) and not os.path.getsize(file) == os.path.getsize(os.path.join(self.FolderListNew[0], temp[-1])):
                print 'Find the file(%s) size is changed!\n' % file
                # print r'Start delete...\n'
                # os.remove(os.path.join(self.FolderListNew[0], temp[-1]))
                # print r'delete is over...\n'
                print 'Start Copy...\n'
                shutil.copyfile(file, os.path.join(self.FolderListNew[0], temp[-1]))
                print 'Copy is over...\n'
              # # 如果是文件夹存在,但是修改过,没有必要全部拷贝文件夹,可以到文件夹中拷贝单个文件
              # if os.path.isfile(file) and not (os.path.getmtime(file) == os.path.getmtime(os.path.join(self.FolderListNew[0], temp[-1]))):
              #   print 'Find the file(%s) size is changed!\n' % file
              #   changetime = os.path.getmtime(file) #以毫秒为单位的时间,自1970年开始到现今
              #   changetime = float(changetime)
              #   print 'Change Time is', time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(changetime)), r'\n'
              #
              #   print 'Start Copy...\n'
              #   shutil.copyfile(file, os.path.join(self.FolderListNew[0], temp[-1]))
              #   print 'Copy is over...\n'
            else:
              if os.path.isdir(file):
                # 如果是文件夹不存在使用,目录树拷贝
                print 'Find the folder(%s) is updated!\n' % file
                print 'Start Copy...\n'
                shutil.copytree(file, os.path.join(self.FolderListNew[0], temp[-1]))
                print 'Copy is over...\n'
              else:
                # 如果是文件
                print 'Find the file(%s) is updated!\n' % file
                print 'Start Copy...\n'
                shutil.copyfile(file, os.path.join(self.FolderListNew[0], temp[-1]))
                print 'Copy is over...\n'
            self.FolderListNew.append(os.path.join(self.FolderListNew[0], temp[-1]))
        del self.FolderListNew[0]
        start = end - 1
    except Exception, e:
      print 'find exception now:',e
if __name__ == '__main__':
  # 配置如下变量
  hostaddr = r'10.204.16.28' # ftp地址
  username = r' ' # 用户名
  password = r' ' # 密码
  remotedir_old = r'\\10.204.16.28\Home\TDME\Test\Old\TMUMH_1.6.1055'
  remotedir_new = r'\\10.204.16.28\Home\TDME\Test\New\TMUMH_1.6.1055'
  monitorfileupdae = MyUpdateMonitor(hostaddr, username, password, remotedir_old, remotedir_new)
  monitorfileupdae.FtpLogin()
  while True:
    print 'Start Check Update...\n'
    monitorfileupdae.LevelOrderFolder()
    print 'Check Update is Over...\tSleep one hour...'
    time.sleep(3600)
  print 'hello' 

总结

以上所述是小编给大家介绍的Python FTP两个文件夹间的同步实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • python rsync服务器之间文件夹同步脚本

    本文实例为大家分享了python rsync服务器之间文件夹同步的具体代码,供大家参考,具体内容如下 About  rsync 配置两台服务器之间3ssh-key后,可以实现自动化无需手动输入密码,脚本如下: import argparse import datetime from functools import partial import multiprocessing as mp import os import paramiko as pmk import time def check

  • python多线程同步之文件读写控制

    本文实例为大家分享了python多线程同步之文件读写控制的具体代码,供大家参考,具体内容如下 1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res = [] if os.path.exists('schedule_times.txt'): fp = open('schedule_times.txt', 'r') else: os.system('to

  • python scp 批量同步文件的实现方法

    该脚本用于将源主机列表路径下的所有文件同步于目标主机的/tmp下面 #!/usr/bin/python # -*- coding:utf-8 -*- import pexpect import os import os.path src_path = ['/tmp/', '/opt/', '/root/'] dest_host = "192.168.143.201" dest_path = "/tmp" for path in src_path: file_list

  • python+rsync精确同步指定格式文件

    本文实例为大家分享了python+rsync精确同步指定格式文件的具体代码,供大家参考,具体内容如下 # coding: utf-8 #!/usr/bin/env python ''' updatedb更新本地服务器指定目录/home/upload/de locate.dbz数据库 然后locate命令正则查找符合条件的文件并将文件名输出到locate.src 通过paramiko模块得到远程服务器符合条件的文件并将文件名输出到locate.dst 比较这两个文件得到locate.diff,最好

  • python同步windows和linux文件

    写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,然后再利用网络copy,重复性很大,就想着能不能写一个小脚本帮我同步 逻辑:比对本地和服务器文件的md5,如果md5不一致,则备份服务器上的文件,将本地的给上传上去 代码分为windows端和服务器端,有些东西,都让python一个做了,写着有点累,就想着,能否服务端提供一个端口,windows去调用这个接口,来完成一部分工作 python代码如下: 需要额外安装的包为是paramiko,安装方

  • Python使用文件锁实现进程间同步功能【基于fcntl模块】

    本文实例讲述了Python使用文件锁实现进程间同步功能.分享给大家供大家参考,具体如下: 简介 在实际应用中,会出现这种应用场景:希望shell下执行的脚本对某些竞争资源提供保护,避免出现冲突.本文将通过fcntl模块的文件整体上锁机制来实现这种进程间同步功能. fcntl系统函数介绍 Linux系统提供了文件整体上锁(flock)和更细粒度的记录上锁(fcntl)功能,底层功能均可由fcntl函数实现. 首先来了解记录上锁.记录上锁是读写锁的一种扩展类型,它可用于有亲缘关系或无亲缘关系的进程间

  • Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res = [] if os.path.exists('schedule_times.txt'): fp = open('schedule_times.txt', 'r') else: os.system('touch schedule_times.txt') fp = open('schedule_ti

  • python实现的文件同步服务器实例

    本文实例讲述了python实现的文件同步服务器.分享给大家供大家参考.具体实现方法如下: 服务端使用asyncore, 收到文件后保存到本地. 客户端使用pyinotify监视目录的变化 ,把变动的文件发送到服务端. 重点: 1. 使用structs打包发送文件的信息,服务端收到后,根据文件信息来接收客户端传送过来的文件. 2. 客户端使用多线程,pyinotify监视到文件变化,放到队列中,由另外一个线程发送. 上代码: 服务端: # receive file from client and

  • python实现两个文件夹的同步

    其实无论windows还是Linux,简单地去实现两个两个文件夹的同步只需系统自带的复制命令加参数就可以了. WINDOWS : xcopy 源文件夹\* 目标文件夹 /s /e /y Linux : cp -r 源文件夹/* 目标文件夹 这里使用python来实现这些基本功能,并增加一些去重之类的增强功能. 1.复制源文件夹中文件至目标文件夹 要想同步两个文件夹中的数据,基本思路首先需要遍历源文件夹中的信息,将源文件夹中的文件复制到目标文件夹. 遍历文件夹采用os中的listdir函数就可以了

  • Python FTP两个文件夹间的同步实例代码

    具体代码如下所示: # -*- coding: utf-8 -*- ''''''' ftp自动检测源文件夹的更新,将源文件夹更新的内容拷贝到目标文件夹中 使用树的层序遍历算法,支持深度目录拷贝 ''' import os from ftplib import FTP import os,sys,string,datetime,time import shutil import socket class MyUpdateMonitor(object): def __init__(self, hos

  • Node.js 文件夹目录结构创建实例代码

    第一次接触NodeJS的文件系统就被它的异步的响应给搞晕了,后来发现NodeJS判断文件夹是否存在和创建文件夹是还有同步方法的,但是还是想尝试使用异步的方法去实现. 使用的方法: fs.exists(path, callback); fs.mkdir(path, [mode], callback); 实现文件夹目录结构的创建代码实现如下: //创建文件夹 function mkdir(pos, dirArray,_callback){ var len = dirArray.length; con

  • Android 实现文件夹排序功能的实例代码

    按文件名排序 /** * 按文件名排序 * @param filePath */ public static ArrayList<String> orderByName(String filePath) { ArrayList<String> FileNameList = new ArrayList<String>(); File file = new File(filePath); File[] files = file.listFiles(); List fileL

  • Python与C++ 遍历文件夹下的所有图片实现代码

     Pyhton与C++ 遍历文件夹下的所有图片实现代码 前言 虽然本文说的是遍历图片,但是遍历其他文件也是可以的. 在进行图像处理的时候,大部分时候只需要处理单张图片.但是一旦把图像处理和机器学习相结合,或者做一些稍大一些的任务的时候,常常需要处理好多图片.而这里面,一个最基本的问题就是如何遍历这些图片. 用OpenCV做过人脸识别的人应该知道,那个项目中并没有进行图片的遍历,而是用了一种辅助方案,生成了一个包含所有图片路径的文件at.txt,然后通过这个路径来读取所有图片.而且这个辅助文件不仅

  • java实现文件夹上传功能实例代码(SpringBoot框架)

    目录 前言 一.前端如何设置上传组件并将资源上传到后台服务 1)首先我们需要新建一个用来提交文件夹的form表单 2)然后我们添加自己框架内的一些按钮来触发该隐藏的表单 二.后台如何接收处理文件夹表单数据 总结 前言 有时我们后台管理等服务可能会有这样一个简单需求,就是根据文件夹将整个文件夹下的所有资源都上传到我们的服务器上,本人也是搜索了大量资料,最终以最简单便捷的方式实现该功能,具体操作步骤如下 一.前端如何设置上传组件并将资源上传到后台服务 这里的项目框架为若依VUE版本,下面将核心的代码

  • python 计算两个日期相差多少个月实例代码

    近期,由于业务需要计算两个日期之前相差多少个月.我在网上找了很久,结果发现万能的python,居然没有一个模块计算两个日期的月数,像Java.C#之类的高级语言,都会有(date1-date2).months的现成方法,觉得不可思议.说句实在的,一直觉得python 的日期处理模块真心不好用. 哦,对了,别跟我说 datetime, calendar, dateutil 这些模块,因为我都试过了,都没用.有个竟然算出来还有错.datetime.timedelta只能计算出日时分秒.对年月却不支持

  • Python实现连接FTP并下载文件夹

    目录 第一章:连接FTP服务器并实现文件夹下载 ①连接FTP服务器 ②进入指定目录并显示文件信息 ③区分文件和文件夹名 ④文件夹名包含空格处理 ⑤使用递归实现:FTP服务器里的文件夹下载到本地 第二章:问题解决 第一章:连接 FTP 服务器并实现文件夹下载 ① 连接 FTP 服务器 如果 FTP 不用用户名密码就直接可以访问,那就是用的默认用户名 Anonymous,密码为空. # -*- coding: UTF8 -*- # 2022-3-8 # 作者:小蓝枣 # python连接ftp服务器

  • Python实现比较两个文件夹中代码变化的方法

    本文实例讲述了Python实现比较两个文件夹中代码变化的方法.分享给大家供大家参考.具体如下: 这里将修改代码后的目录与原始目录做对比,罗列出新增的代码文件,以及修改过的代码文件 # -*- coding: utf-8 -*- import os; folderA = "F:\\Projects\\FreeImageV3_14_1\\".lower(); folderB = u"E:\\Software\\图像解码库\\FreeImage3141\\FreeImage\\&q

  • Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】

    本文实例讲述了Python编程实现两个文件夹里文件的对比功能.分享给大家供大家参考,具体如下: #-*-coding:utf-8-*- #=============================================================================== # 目录对比工具(包含子目录 ),并列出 # 1.A比B多了哪些文件 # 2.B比A多了哪些文件 # 3.二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显

随机推荐