zoukankan      html  css  js  c++  java
  • python入门-简单的文件备份程序

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

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

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

    md5校验选择备份

     1 # -*- coding: utf-8 -*-
     2 
     3 
     4 import hashlib
     5 import os
     6 import shutil
     7 
     8 
     9 def md5check(fname):
    10     m = hashlib.md5()
    11     with open(fname, 'rb') as f: # 这里文件的打开方式与原文不同,由于在备份我的文件时出现了编码问题,所以进行了修改,以二进制方式打开
    12         while True:
    13             data = f.read(4096)
    14             if not data:
    15                 break
    16             m.update(data)
    17     return m.hexdigest()
    18 
    19 
    20 
    21 
    22 # 文件复制函数
    23 def copy(path):
    24     new_path = path
    25     new_path = new_path.replace(old_source, new_source)
    26     print(new_path)
    27     if os.path.isfile(new_path):
    28         old_md5 = md5check(path)
    29         new_md5 = md5check(new_path)
    30         if old_md5 != new_md5:
    31             shutil.copy(path, new_path)
    32     else:
    33         dirname = os.path.dirname(new_path)
    34         if os.path.exists(dirname): # 如果目录存在,直接复制文件到new_path
    35             shutil.copy(path, new_path)
    36         else: # 如果目录不存在,则直接创建目录并复制文件
    37             try:
    38                 os.makedirs(dirname)
    39                 shutil.copy(path, new_path)
    40             except WindowsError:
    41                 print('创建目录出错')
    42 
    43 # 查找所有目录文件的递归函数
    44 def lsdir(folders):
    45     path = os.listdir(folders)
    46     for line in path:
    47         line = folders + '/' + line
    48         if(os.path.isdir(line)):
    49             lsdir(line)
    50         else:
    51             copy(line)
    52 
    53 
    54 55 56 
    57 
    58 
    59 if __name__ == '__main__':
    60     global old_source
    61     global new_source
    62     print('例子:d:/directory,请输入要备份的目录所在地址、以及目标地址:')
    63     old_source = 'C:/Users/xxxx/AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb'
    64     new_source = 'D:/leveldb' # 此处不知道只传入盘符会发生什么,建议不要这么做,未经测试
    65     lsdir(old_source)
    66     

    完全备份

    # -*- 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)
  • 相关阅读:
    数值分析之奇异值分解(SVD)篇
    windows/linux VPS云服务器限制IP访问,限制别人的IP访问网站方法
    WORDPRESS博客完美更换网站空间服务器的方法
    教你9个提升 Wordpress 网站安全性的方法
    Windows 2008 R2+iis7.5环境下Discuz!X3论坛伪静态设置方法
    各大型网站使用的服务器空间运行环境盘点
    VPS/云主机 如何试用远程连接登录主机服务器_
    Discuz! X论坛上传附件到100%自动取消上传的原因及解决方案
    Discuz! X3搬家后UCenter出现UCenter info: MySQL Query Error解决方案
    如何刷新DNS缓存
  • 原文地址:https://www.cnblogs.com/xia-Autumn/p/8295327.html
Copyright © 2011-2022 走看看