由于备份的需要,需要经常备份一些重要的文件,但是又不能逐个比较,所以就度了一下,找到了这篇博文,在此表示感谢,下面是python3版的写法,其中有一些改变,重要的改变之处作出了简要注释,完整注释请参考原文,

重要:下面代码未经充分测试,在备份自己文件之前,请充分测试,如有疏漏之处,欢迎留言,一起学习

注意:注意路径的分割斜杠,在这里是斜杠/而非反斜杠\

md5校验选择备份

 # -*- coding: utf-8 -*-

 import hashlib
import os
import shutil def md5check(fname):
m = hashlib.md5()
with open(fname, 'rb') as f: # 这里文件的打开方式与原文不同,由于在备份我的文件时出现了编码问题,所以进行了修改,以二进制方式打开
while True:
data = f.read(4096)
if not data:
break
m.update(data)
return m.hexdigest() # 文件复制函数
def copy(path):
new_path = path
new_path = new_path.replace(old_source, new_source)
print(new_path)
if os.path.isfile(new_path):
old_md5 = md5check(path)
new_md5 = md5check(new_path)
if old_md5 != new_md5:
shutil.copy(path, new_path)
else:
dirname = os.path.dirname(new_path)
if os.path.exists(dirname): # 如果目录存在,直接复制文件到new_path
shutil.copy(path, new_path)
else: # 如果目录不存在,则直接创建目录并复制文件
try:
os.makedirs(dirname)
shutil.copy(path, new_path)
except WindowsError:
print('创建目录出错') # 查找所有目录文件的递归函数
def lsdir(folders):
path = os.listdir(folders)
for line in path:
line = folders + '/' + line
if(os.path.isdir(line)):
lsdir(line)
else:
copy(line) if __name__ == '__main__':
global old_source
global new_source
print('例子:d:/directory,请输入要备份的目录所在地址、以及目标地址:')
old_source = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
new_source = 'D:/leveldb' # 此处不知道只传入盘符会发生什么,建议不要这么做,未经测试
lsdir(old_source)

完全备份

# -*- coding: utf-8 -*-
# 脚本功能:删除new_path目录,然后复制original_path到new_path目录,注意两目录的名称要一样,初衷:用于名称变化的需要备份的文件
# 基于python3 import os
import shutil # 不校验直接删除已备份文件,再重新备份源文件
def non_checkout_backup(original_path, new_path):
if os.path.exists(new_path):
shutil.rmtree(new_path) # shutil.rmtree空目录、有内容的目录都可以删,但是必须要存在,否则报错, 而os.rmdir只能删除空目录
shutil.copytree(original_path, new_path) # original_path、new_path都只能是目录 if __name__ == '__main__':
original_path = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
new_path = 'D:/leveldb'
non_checkout_backup(original_path, new_path)

python入门-简单的文件备份程序的更多相关文章

  1. python -----一个简单的小程序(监控电脑内存,cpu,硬盘)

    一个简单的小程序 用函数实现!~~ 实现: cpu 使用率大于百分之50 时  ,  C 盘容量不足5 G 时, 内存 低于2G 时. 出现以上其中一种情况,发送自动报警邮件! 主要运用 到了两个 模 ...

  2. 利用Python制作简单的小程序:IP查看器

    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...

  3. [作业] Python入门基础---购物车小程序

    1.购物车小程序: 1.1用户输入工资取60% 1.2打印输出商品菜单 1.3由用户输入数字选择 #__author:Mifen #date: 2018/11/27 # 购物车程序 #把工资作为账户的 ...

  4. Python 练习: 简单角色游戏程序

    要求: 1.创建三个游戏人物,分别是: 苍井井,女,18,初始战斗力1000 东尼木木,男,20,初始战斗力1800 波多多,女,19,初始战斗力2500 2.游戏场景,分别: 草丛战斗,消耗200战 ...

  5. Python入门-函数的使用到程序的公布安装

    Python入门-函数的使用到Python的公布安装 本文主要适合有一定编程经验,至少掌握一门编程语言的人查看. 文中样例大多都是简单到认识英文单词就能看懂的水平,主要讲的是Python的总体使用方法 ...

  6. python入门(4)第一个python程序

    python入门(4)第一个python程序 在交互式环境的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果.现在,试试输入100+200,看看计算结果是不是300: ...

  7. 用python写个简单的小程序,编译成exe跑在win10上

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  8. 40个Python入门小程序

    有不少同学学完Python后仍然很难将其灵活运用.我整理 37 个Python入门的小程序.在实践中应用Python会有事半功倍的效果. 分享 Github 项目,里面收集了 Python 学习资料 ...

  9. 大爽Python入门教程 1-1 简单的数学运算

    大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...

随机推荐

  1. Charles 抓包工具的使用

    抓包工具有很多,目前用过的有Charles, Fiddler, burpsuite.下面主要是Charles 的应用实例. 一. 用Charles抓包 1. PC 抓包 打开Charles, 确保“录 ...

  2. 浅析selenium的PageFactory模式 PageFactory初始化pageobject

    1.首先介绍FindBy类: For example, these two annotations point to the same element: @FindBy(id = "foob ...

  3. 从iOS的图片圆角想到渲染

    圆角是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.设置圆角会带来一定的性能损耗,如何提高性能是一个需要重点讨论的话题. 大家常见的圆角代码x.layer.cornerRadius = ...

  4. 一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”

    6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为题目的英文描述难以理解? ...

  5. spark 作业提交

    kafka-topics.sh --describe --zookeeper xxxxx:2181 --topic testkafka-run-class.sh kafka.tools.GetOffs ...

  6. java: -source 1.6 中不支持 switch 中存在字符串

    最近在使用IDEA进行单个文件编译的时候给我报错,如题. 解决办法:将 Modules --->Sources ---> Language level 改为 7.0就ok了.

  7. [转]将Eclipse设置为黑色主题 方式一

    将Eclipse设置为黑色主题 觉得黑色的主题&配色很高大上,于是花了点时间实践出下面一种方法. 修改代码编辑区配色 修改整个软件主题 先上成果图: 但是进度条依旧是白色的,不知道怎么弄了╮( ...

  8. Docker-docker镜像

    前言 在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像. 查看安装的Docker版本信息: [dockuser@localhost Desktop]$ docker ...

  9. android - Session 'app': Error Installing APK

    File->Settings->Build,Execuion,Deployment->Instant Run 然后把Enable Instant Run to...那一项的勾去掉就好 ...

  10. 三年半Java后端面试经历

    经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位:go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背景 ...