# 作用:7 #   合并并两个目录/文件夹。8 #   将目录A合并到目录B,同级目录下,9 #   将A中有,B中没有的目录完全复制到B中;10 #   将A中没有,B中有的目录不做改动;11 #   将A中做了修改的文件,在B的同级目录下创建一个副本。(注意不是覆盖)12 #13 # 适应场景:14 #   一般A是从B复制过来的文件夹,做了修改后,想合并回B。15 #   这样在A中做的一些改动我们就不知道了,这个程序的作用是,16 #   将A中修改的部分在B中更新。17 #18 # 版本:19 #   将修改后的文件完全复制过去20 #   旧的文件创建副本21 #   基于文件的MD5值判断是否修改过22 #23 24 import os25 import shutil26 import time27 import hashlib28 import sys29 30 def Help():     # 输出帮助文档31   print """  32 PathMerge.py33 作者:freecode34 创建时间:2016.4.9 20:1535 作用:36     合并并两个目录/文件夹。37     将目录A合并到目录B,同级目录下,38     将A中有,B中没有的目录完全复制到B中;39     将A中没有,B中有的目录不做改动;40     将A中做了修改的文件,在B的同级目录下创建一个副本。(注意不是覆盖)41 42 适应场景:43     一般A是从B复制过来的文件夹,做了修改后,想合并回B。44     这样在A中做的一些改动我们就不知道了,这个程序的作用是,45     将A中修改的部分在B中更新。46 47 版本:48     将修改后的文件完全复制过去49     旧的文件创建副本50     基于文件的MD5值判断是否修改过51 """52 53 def GetFileMd5(filename):       # 计算文件的md5值54     if not os.path.isfile(filename):55         return56     myhash = hashlib.md5()57     f = file(filename,'rb')58     while True:59         b = f.read(8096)60         if not b :61             break62         myhash.update(b)63     f.close()64     return myhash.hexdigest()65 66 def isModify(A_file,B_file):        # 判断两个文件是否相同,如果不同,表示修改过67     # 参数需是绝对路径68     return  GetFileMd5(A_file) != GetFileMd5(B_file)69 70 def Stamp2Time(Stamp):      # 将时间戳转换成时间显示格式71     timeArray = time.localtime(Stamp)72     Time = time.strftime("%Y年%m月%d日 %H时%M分%S秒 旧文件副本", timeArray)73     return Time74 75 def Merge(A_path,B_path):       # 合并两个目录76     B_paths = os.listdir(B_path)    # 获取当前B中的目录结构77     for fp in os.listdir(A_path):   # 遍历当前A目录中的文件或文件夹78         A_new_path = os.path.join(A_path,fp)    # A中的文件或目录79         B_new_path = os.path.join(B_path,fp)    # B中对应的文件或路径,不一定存在80 81         if os.path.isdir(A_new_path):           # A中的目录82             if os.path.exists(B_new_path):      # 如果在B中存在83                 Merge(A_new_path,B_new_path)    # 继续合并下一级目录84             else:   # 如果在B中不存在85                 print '[目录]\t%s ===> %s' %(A_new_path,B_new_path)86                 shutil.copytree(A_new_path,B_new_path)   # 完全复制目录到B87                 88         elif os.path.isfile(A_new_path):        # A中的文件89             if os.path.exists(B_new_path):      # 如果在B中存在90                 s = os.stat(B_new_path)91                 if isModify(A_new_path,B_new_path) == True:  # 如果该文件修改过92                     # 创建副本93                     suffix = B_new_path.split('.')[-1]  # 得到文件的后缀名94                     # 将B中原文件创建副本95                     B_copy_path = B_new_path[:-len(suffix)-1]+"(%s)."%(Stamp2Time(s.st_mtime))+suffix96                     print '[副本]\t%s ===> %s' %(A_new_path,B_copy_path)97                     shutil.copy2(B_new_path,B_copy_path)98                     # 将A中修改后文件复制过来99                     print '[文件]\t%s ===> %s' %(A_new_path,B_new_path)
100                     shutil.copy2(A_new_path,B_new_path)
101                 else:  # 如果该文件没有修改过
102                     pass    # 不复制
103
104             else:   # 如果在B中不存在
105                 # 将该文件复制过去
106                 print '[文件]\t%s ===> %s' %(A_new_path,B_new_path)
107                 shutil.copy2(A_new_path,B_new_path)
108
109 # 运行模式
110 if __name__=='__main__':
111     print """
112         欢迎使用PathMerge!
113         本程序将会把目录A合并到目录B,即 A ===> B
114         将A目录中修改的内容在B目录中更新
115         合并规则具体见 PathMerge.Help()
116         """
117     if len(sys.argv) == 1:
118         path1 = raw_input('请输入A目录:').strip()
119         path2 = raw_input('请输入B目录:').strip()
120     elif len(sys.argv) == 2:
121         path1 = sys.argv[1].strip()
122         print 'A目录为:%s\n' % (path1)
123         path2 = raw_input('请输入B目录:').strip()
124     elif len(sys.argv) == 3:
125         path1 = sys.argv[1].strip()
126         print 'A目录为:%s\n' % (path1)
127         path2 = sys.argv[2].strip()
128         print 'B目录为:%s\n' % (path2)
129     else:
130         print 'ERROR:参数错误!\n参数最多有三个!\n'
131         raw_input('\n请按回车键(Enter)退出……')
132         sys.exit(0)
133     # 去除目录的引号
134     if path1[0]=='\"':
135       path1 = path1[1:-1]
136     if path2[0]=='\"':
137       path2 = path2[1:-1]
138
139     print """
140 开始合并目录 %s
141    到目录 %s
142 %s ===> %s
143 """ %(path1,path2,path1,path2)
144
145     try:
146         print '合并中……'
147         Merge(path1,path2)
148         print ''
149     except Exception,e:
150         print '合并失败!'
151         print '失败原因:\n',e
152     else:
153         print '合并成功!'
154
155     raw_input('\n请按回车键(Enter)退出……')
156     

python合并两个文件夹相关推荐

  1. Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件

    Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些文件 目录 Python判断两个文件夹中互相不同的文件有哪些.判断一个文件夹相对于另外一个文件夹缺少了哪些 ...

  2. 利用python实现两个文件夹的同步

    其实无论windows还是Linux,简单地去实现两个两个文件夹的同步只需系统自带的复制命令加参数就可以了. WINDOWS : xcopy 源文件夹\* 目标文件夹 /s /e /y Linux : ...

  3. python实现两个文件夹中同名文件转移

    import os,random,shutilxml_dir = '/home/xiaobumidm/Yolo_mark-master/jsonxml/' initimage_dir='/home/x ...

  4. linux下合并两个文件夹

    一.我想把自己自定义的软件统一放到man手册路径里.如何和现有的/usr/local/share文件夹合并起来,原来的文件还在? (1)下面是解压出的自定义的bashdb调试软件==> (2)和 ...

  5. 使用python实现两个文件夹里文件的对比(包含内容的对比)

    #-*-coding:utf-8-*- #=============================================================================== ...

  6. python同步两个文件夹内容

    使用python函数dirsync from dirsync import sync source_path = '/Give/Source/Folder/Here' target_path = '/ ...

  7. python实现合并两个文件并打印输出

    # python实现合并两个文件并打印输出import fileinputfile_Path1 = input("请输入第一个合并文件:") file_Path2 = input( ...

  8. python将一个文件夹下图片按比例分在两个文件夹下

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 将一个文件夹下图片按比例分在两个文件夹下,比例改0.7这个值即可 import os import ran ...

  9. python如何选择excel文件夹_python如何读取excel文件夹

    python如何读取excel文件夹,内容,单元格,操作,索引,名称 python如何读取excel文件夹 易采站长站,站长之家为您整理了python如何读取excel文件夹的相关内容. python ...

最新文章

  1. C++构造函数(一)
  2. nova-scheduler详解 openstack-ice版
  3. I.MX6 Power off register hacking
  4. youtube根据vedioId获取视频相关信息
  5. abstract class与interface的差异
  6. 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...
  7. 利用WebService实现远程服务器文件的上传和下载
  8. Ubuntu19.04安装mysql8.0版本(亲测OK)
  9. MySQL(二)数据的检索和过滤
  10. python FOR循环
  11. hive sqoop 分区导入_利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中
  12. python 点云配准,python点云滤波 点云配准用python怎
  13. Ubuntu18.04下使用docker制作ubuntu20.04镜像
  14. 计算机二级系统环境,计算机等级二级Java考试辅导:“系统和环境”单元综合复习...
  15. mount、umount 挂载卸载命令
  16. etree不能使用,etree.HTML()不能使用。
  17. Tensorflow教程之语音识别
  18. 游戏1024设计分析
  19. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
  20. web前端培训 - 12个有用的 JavaScript 代码片段

热门文章

  1. GiffGaff 英国电话卡,注册送5英镑电话费
  2. win10系统+CentOS双系统安装
  3. 机器人工程毕业设计☞esp8266/32
  4. MQ 之 RocketMQ 核心知识点
  5. Chimm.Excel——使用 Java 基于 excel 模板操作表格的生成
  6. aspire鹦鹉螺_Aspire鹦鹉螺2S雾化器,将用户体验进行到底
  7. 22.MongoDB删除操作效率及相关问题验证
  8. VMvare中的虚拟机点击没反应
  9. DevExpress的GridControl控件筛选行自动筛选模式
  10. 【issue】让屏幕保持不暗