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:/ ...
随机推荐
- pytest 7 assert断言
前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了. 断言用到的是 assert关键字.之前的介绍,有的测试方法中其实用到了assert断言.简单的来说,就是预期的结果去和实际 ...
- mac 修改root密码
1.用当前用户登录进去bash: 输入命令: sudo passwd root
- selinux 的使用
SELinux 的启动.关闭与查看 1,并非所有的 Linux distributions 都支持 SELinux 的 目前 SELinux 支持三种模式,分别如下: •enforcing:强制模式, ...
- (string 数组) leetcode 804. Unique Morse Code Words
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- Altium Designer 18 ------ 原理图和PCB元器件互相查找
方法一:单击选中原理图中元器件,然后单击tools>Seclect PCBcomponents,即可在PCB中看到该器件的高亮显示: 方法二:单击Tools>Cross Select Mo ...
- python3: requests模块的使用;
requests库常用于http请求,可以很方便对网页进行爬取: 主要方法(七个): 方法 解释 requests.request() 构造一个请求,支持以下各种方法 requests.get() 获 ...
- 数据挖掘的标准流程-CRISP-DM
1.起源 CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘过程标准".此KDD(know ...
- Storm中重要对象的生命周期
Spout方法调用顺势 declareOutputFields()(调用一次) open() (调用一次) activate() (调用一次) nextTuple() (循环调用 ) deactiva ...
- 剑指Offer_编程题_2
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. class Solution ...
- 《玩转Django2.0》读书笔记-Django配置信息
<玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...