python - 代码练习 - 差异备份/同步更新
差异备份以及文件同步:
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 - 代码练习 - 差异备份/同步更新的更多相关文章
- 万答#2,一样的Python代码,为什么可以删表,却不能更新数据
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 运行下面的这段Python代码,却总是无法更新数据: import pym ...
- github新建repositories后import已有code 随后同步更新
github上,可以forks别人已有的项目,而且同步更新合并也很方便,但如果是自己新建的项目,而导入的是别人的代码修改后,别人的又更新了,自己想获取他的更新,怎么办呢?其实很简单. # git cl ...
- 如何优雅的写好python代码?
Python与其他语言(比如 java或者 C ++ )相比有较大的区别,其中最大的特点就是非常简洁,如果按照其他语言的思路老师写Python代码,则会使得代码繁琐复杂,并且容易出现bug,在Pyth ...
- 做ETL的时候用到的数据同步更新代码
这里是用的从一个库同步到另一个库,代码如下 private void IncrementalSyncUpdate(string fromConn, string toConn, Dictionary& ...
- 通过PHP与Python代码对比浅析语法差异
一.背景 人工智能这几年一直都比较火,笔者一直想去学习一番:因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着基础不牢,地动山摇的尴尬,比如在遇到稍微深入些的问题时候就容 ...
- Git同步更新操作GitHub和码云仓库上面的代码
一.前言 问题: 小编在生活中,一般都是将代码保存到github上,但由于国内的码云仓库确实速度比github快很多,用起来也很方便,于是后来就慢慢转码云了,当然小编在github上的代码也不想放弃更 ...
- 141029 V7 异步通知测试,15分钟循环代码重构,同步更新payInfo测试,支付成功timer测试成功说明
支付成功之后的1分钟定时任务:测试成功. 2014-10-29 17:16:06,892 DEBUG [http-bio-8086-exec-1] org.springframework.web.se ...
- Git同步Python代码
之前我们都是将代码保存到本地目录, 然后再上传到Git中,但如果针对在pycharm中的代码,就要换另一种方式了,下面简单介绍一下. 1.打开pycharm主界面,选择菜单栏VCS---checkou ...
- 深入理解 GIL:如何写出高性能及线程安全的 Python 代码
深入理解 GIL:如何写出高性能及线程安全的 Python 代码 本文由 伯乐在线 - 郑芸 翻译.未经许可,禁止转载!英文出处:A. Jesse.欢迎加入翻译组. GIL对多线程的影响:http:/ ...
随机推荐
- jenkins学习:jenkins+gitlab
配置前提: 1.Jenkins已安装git plugin,gitlab plugin,安装过程可参考 https://www.cnblogs.com/zhizhiyin/p/9138309.html ...
- 数据库日志redo和undo
数据库的ACID属性 Atomicity:原子性,以事物transact为最小单位,事物中的所有操作,要么都执行完,要么都不执行,不存在一部分操作执行,另一部分操作不执行的情况. Consistenc ...
- (DIjsktra算法) nyoj1401-一场说走就走的旅行
题目描述: 有一天,孩子回来对我说:“妈妈,听说马尔代夫很不错,放假了我想去玩.”马尔代夫?我也想去!没有人不向往一场说走就走的旅行!“其实我想去的地方很多,呼伦贝尔大草原.玉龙雪山.布达拉宫.艾菲尔 ...
- (贪心 优先队列)P1090合并果子 洛谷
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- Spring Boot学习记录02_构建SpringBoot工程_通过idea构建
1.通过idea新建工程 2.Initial Service Url指向的地址就是Spring官方提供的Spring Initializr工具地址 3.结合情况进行设置 4.这里我选择的版本是1.5. ...
- Linux下查看某个进程打开的文件数-losf工具常用参数介绍
Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...
- linux备份用户权限
1:切换root用户,进入home目录,执行以下命令: [root@localhost home]# ll /home/wangfajun 2: home目录下执行以下命令进行wangfajun用户的 ...
- sql 三表左外链接的2种写法【原】
初始化语句 DROP TABLE student; ) )); ','bobo'); ','sisi'); ','gugu'); ','mimi'); DROP TABLE room; ) ),roo ...
- OPCServer:使用KEPServer
实际OPCServer使用(450M,中文,破解时间限制):KEPServer V6,百度网盘 ,密码: ykj2 本文为Java实现OPC通信的一部分 KEPServer中文官网 KEPServer ...
- 使用C#的HttpWebRequest模拟登陆网站
很久没有写新的东西了,今天在工作中遇到的一个问题,感觉很有用,有种想记下来的冲动. 这篇文章是有关模拟登录网站方面的. 实现步骤: 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话 ...