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:/ ...
随机推荐
- 精读Hadamard Response论文
一.摘要 主要研究问题基于本地化差分隐私的k-分布,之前最佳的算法要求的是线性通信代价(k),而服务器计算时间的n*k,n表示所有的用户样本. 作者提出的HR不要求共享随机性,并且每个用户输入的数据都 ...
- 【清北学堂2018-刷题冲刺】Contest 1
Task 1:最小公倍数 输入n,求n与246913578的最小公倍数. 结果对1234567890取模. [样例输入] 3 [样例输出] 246913578 [数据规模和约定] 对于30%的数据 ...
- pstack跟踪进程栈
一:简介 这个命令可以显示每个进程的栈跟踪.pstack命令必须由相应进程的宿主或root运行.可以使用pstack来确定进程挂起的位置.此命令允许使用唯一选项就是进程的PID 这个命令在排查进程问题 ...
- Mysq基础l数据库管理、表管理、增删改数据整理
一. 数据库管理: 创建数据库: create database(自定义) 查询所有数据库: show databases;(查询所有数据库) show create database ( ...
- 数据预处理:独热编码(One-Hot Encoding)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- Hadoop生产环境配置文件
前提: ①已经搭建好zk ②已经安装好JDK 正文开始: 首先从官网下载hadoop 2.7.3 (虽然官网3.0都出了.但是目前还没经过完全的测试..待测试后...) 一.hadoop-env.sh ...
- Linux记录-CPU指标介绍
在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况.而监控CPU的性能一般包括以下3点:运行队列.CPU使用率和上下文切换. 对于每一个CPU来说运行队列最好不要超过3,例 ...
- spring MVC页面的重定向
如图,一个jsp页面跳转到下一个jsp页面通常需要上一个页面发出带有参数得请求,我们都知道spring MVC是不能直接跳页面的. 需要配置视图解析器,通过返回视图名再跳转到相应得JSP页面. 即使这 ...
- MySQL mysqldump与source导入慢的解决方法
Jquery中文网 > 数据库 > mysql > 正文 MySQL mysqldump与source导入慢的解决方法 MySQL mysqldump与source导入慢的 ...
- sql -leetcode 178. Rank Scores
Score 很好得到: select Score from Scores order by Score desc; 要得到rank, 可以通过比较比当前Score 大的Score 的个数得到: sel ...