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:/ ...
随机推荐
- QT槽函数处理线程
今天用到QTcpSocket的时候,由于客户端发起请求在一个线程里,当readyRead的信号发出后接收的槽函数是否还会在该线程里处理? 现在看来其实是交给主线程处理的,那么我要实现在线程里处理怎么实 ...
- c#委托中的匿名方法和lambda表达式
一.一般委托方式 Func<int, int, int> AddMethodHander; public unName() { AddMethodHander += AddMethod; ...
- 2017-12-15python全栈9期第二天第七节之练习题
#!/user/bin/python# -*- coding:utf-8 -*-print(6 or 2 > 1)print(3 or 2 >1 )print(0 or 5 <4)p ...
- 网络编程基础【day09】:socketserver使用(九)
本节内容 1.概述 2.socketserver类型 3.创建socketserver步骤 4.简单的代码实现 一.概述 我们之前的用户都是不支持多并发的,所以我们现在需要一个支持多用户,实现一个并发 ...
- Jquery Pagination分页插件使用
JqueryPagination是个简单轻量级的分页插件,使用起来很容易,只要初始化一个实例,并设置总数量.翻页回调函数.其它参数就可以实现无刷新分页功能了. 准备工作 下载jquery.min.js ...
- 信息摘要算法之一:MD5算法解析及实现
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...
- golang使用redis
redigo使用 手册地址:http://godoc.org/github.com/garyburd/redigo/redis github地址:https://github.com/garyburd ...
- row_number()over()使用
语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 通过语法可以看出 o ...
- in和hasOwnProperty的区别
两者都代表查看某个属性是不是对象自己的,返回布尔值 in判断的是对象的所有属性,包括对象实例及其原型的属性 hasOwnProperty则是判断对象实例的是否具有某个属性
- 026、一张图搞懂docker(2019-01-21 周一)
参考https://www.cnblogs.com/CloudMan6/p/6961665.html