差异备份以及文件同步:

import os
import filecmp
import shutil
import re # 差异增量更新,dir2 文件目录 与 dir1 文件目录更新,
def a(dir1,dir2):
cc = []
d1 = os.path.abspath(dir1)
d2 = os.path.abspath(dir2)
a1 = filecmp.dircmp(d1,d2) cc += a1.diff_files + a1.left_only
# print("差异列表:",cc) if cc:
for i3 in cc:
# print(os.path.join(d1,i3))
if os.path.isfile(os.path.join(d1,i3)):
shutil.copy2(os.path.join(d1,i3),d2)
else:
os.makedirs(os.path.join(d2,i3))
a(os.path.join(d1,i3),os.path.join(d2,i3))
else:
a2 = a1.left_list
for i in a2:
if os.path.isdir(os.path.join(d1,i)):
a(os.path.join(d1,i), os.path.join(d2,i)) # dir2 文件目录与 dir1 文件目录同步,删除dir2 多余的文件以及目录
def b(dir2,dir1):
def cc(dir):
t = []
redir = "(%s)" % r'\\'.join(dir.split("\\"))
for i in os.walk(dir):
# print(i)
if i[2] == []: continue
if len(i[2]) > 1:
for i2 in i[2]:
t.append(os.path.join(re.sub(redir, '', i[0]), i2))
else:
t.append(os.path.join(re.sub(redir, '', i[0]), i[2][0]))
return t # 所有源文件的绝对路径
t1 = cc(dir1) # 所有备份的文件的绝对路径
t2 = cc(dir2) # 备份文件与源文件同步,找出备份文件中有的,而源文件没有的.
t3 = list(set(t2).difference(set(t1))) # 移除多余的文件
for i3 in t3:
print(dir2,'---',i3)
print('移除备份目录中多余的文件: %s'% ''.join(dir2+i3))
pa = ''.join(dir2+i3)
os.remove(pa) # 递归去删除空的目录
def c(dir2):
for i in os.walk(dir2):
if len(i[2]) != 0:continue
try:
os.rmdir(i[0])
except OSError as e:
for i2 in i[1]:
c(os.path.join(i[0],i2)) # 主函数
def main(dir1,dir2):
a(dir1,dir2)
b(dir2,dir1)
c(dir2) if __name__ == '__main__':
dir1 = input("请输入源目录绝对路径:")
dir2 = input("请输入备份目录绝对路径:")
main(dir1,dir2)

python - 代码练习 - 差异备份/同步更新的更多相关文章

  1. 万答#2,一样的Python代码,为什么可以删表,却不能更新数据

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 运行下面的这段Python代码,却总是无法更新数据: import pym ...

  2. github新建repositories后import已有code 随后同步更新

    github上,可以forks别人已有的项目,而且同步更新合并也很方便,但如果是自己新建的项目,而导入的是别人的代码修改后,别人的又更新了,自己想获取他的更新,怎么办呢?其实很简单. # git cl ...

  3. 如何优雅的写好python代码?

    Python与其他语言(比如 java或者 C ++ )相比有较大的区别,其中最大的特点就是非常简洁,如果按照其他语言的思路老师写Python代码,则会使得代码繁琐复杂,并且容易出现bug,在Pyth ...

  4. 做ETL的时候用到的数据同步更新代码

    这里是用的从一个库同步到另一个库,代码如下 private void IncrementalSyncUpdate(string fromConn, string toConn, Dictionary& ...

  5. 通过PHP与Python代码对比浅析语法差异

    一.背景 人工智能这几年一直都比较火,笔者一直想去学习一番:因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着基础不牢,地动山摇的尴尬,比如在遇到稍微深入些的问题时候就容 ...

  6. Git同步更新操作GitHub和码云仓库上面的代码

    一.前言 问题: 小编在生活中,一般都是将代码保存到github上,但由于国内的码云仓库确实速度比github快很多,用起来也很方便,于是后来就慢慢转码云了,当然小编在github上的代码也不想放弃更 ...

  7. 141029 V7 异步通知测试,15分钟循环代码重构,同步更新payInfo测试,支付成功timer测试成功说明

    支付成功之后的1分钟定时任务:测试成功. 2014-10-29 17:16:06,892 DEBUG [http-bio-8086-exec-1] org.springframework.web.se ...

  8. Git同步Python代码

    之前我们都是将代码保存到本地目录, 然后再上传到Git中,但如果针对在pycharm中的代码,就要换另一种方式了,下面简单介绍一下. 1.打开pycharm主界面,选择菜单栏VCS---checkou ...

  9. 深入理解 GIL:如何写出高性能及线程安全的 Python 代码

    深入理解 GIL:如何写出高性能及线程安全的 Python 代码 本文由 伯乐在线 - 郑芸 翻译.未经许可,禁止转载!英文出处:A. Jesse.欢迎加入翻译组. GIL对多线程的影响:http:/ ...

随机推荐

  1. fiddler接口测试,js代码修改日志展示(埋点用)

    fiddler 通过fiddler 发送接口信息: http://blog.csdn.net/java2013liu/article/details/53380381 rules--automatic ...

  2. (线性DP LIS)POJ2533 Longest Ordered Subsequence

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 66763   Acc ...

  3. SVN提交前准备

    操作步骤1: 操作步骤2: 操作步骤3: 操作步骤4: 操作步骤5: 操作步骤6:查看 操作步骤7:ignore 操作步骤8:直接提交项目

  4. 42套JavaScript深度解析教学视频!合集

    本文首发于:风云社区SCOEE(社区旨在普惠软件.图片.音乐.视频.素材.文档等互联网资源.为大众提供多样化的服务,以及主要涵盖学术科学.电脑技术.文化人文.体育健身等领域的知识和信息,获得用户的支持 ...

  5. Centos 7最小化安装部署PostgreSQL

    安装 sh-4.2# yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-ce ...

  6. mybtis 基础

    一.什么是mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBati ...

  7. 搭建Hadoop集群(生产环境)

    1.搭建之前:百度copy一下介绍 (本博客几乎全都是生产环境的配置..包括mongo等hbase其他) Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层 ...

  8. Web API中的模型验证

    一.模型验证的作用 在ASP.NET Web API中,我们可以使用 System.ComponentModel.DataAnnotations 命名空间中的属性为模型上的属性设置验证规则. 一个模型 ...

  9. 关于Android Studio开发环境变量的设置(avd启动黑屏)

    之前因为乱按网上的设置导致启动avd启动黑屏,查了很久原来是ANDROID_AVD_HOME变量没有加$符号 以下是正确的环境变量配置 添加环境变量(注意avd中有一个$符号) ANDROID_SDK ...

  10. PHP7 学习笔记(十一)使用phpstudy快速配置一个虚拟主机

    说明:为了windows本地开发php方便,这里推荐使用PHP集成环境phpstudy. 目的:使用域名访问项目(tinywan.test) 1.官网:http://www.phpstudy.net ...