[ python ] 小脚本及demo-持续更新

1.  备份文件并进行 md5 验证

需求分析:

  根据需求,这是一个流程化处理的事件。 检验拷贝文件是否存在,不存在则执行拷贝,拷贝完成再进行 md5 值的比对,这是典型的面向过程编程;

代码如下:

需要备份的文件和程序在同一目录下:

哪里有彩虹告诉我
能不能把我的愿望还给我
为什么天这么安静
所有的云都跑到我这里
有没有口罩一个给我
释怀说了太多就成真不了
也许时间是一种解药
也是我现在正服下的毒药
看不见你的笑 我怎么睡得着
你的声音这么近我却抱不到
没有地球太阳还是会绕
没有理由我也能自己走
你要离开 我知道很简单
你说依赖 是我们的阻碍
就算放开 但能不能别没收我的爱
当作我最后才明白
有没有口罩一个给我
释怀说了太多就成真不了
也许时间是一种解药
也是我现在正服下的毒药
看不见你的笑 我怎么睡得着
你的声音这么近我却抱不到
没有地球太阳还是会绕
没有理由我也能自己走
你要离开 我知道很简单
你说依赖 是我们的阻碍
就算放开 但能不能别没收我的爱
当作我最后才明白
看不见你的笑 要我怎么睡得着
你的身影这么近我却抱不到
没有地球太阳开始会绕会绕
没有理由我也能自己走掉
释怀说了太多就成真不了
也许时间是一种解药解药
也是我现在正服下的毒药
你要离开 我知道很简单
你说依赖 是我们的阻碍
就算放开 但能不能别没收我的爱
当作我最后才明白
rainbow.txt
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author: hkey
import hashlib, os


def copy_file(s_file, d_file):
    '''
    文件拷贝
    :param s_file: 拷贝源文件
    :param d_file: 拷贝后的目标文件
    '''
    with open(s_file, 'rb') as f1, open(d_file, 'ab') as f2:
        while True:
            # 读取大文件的时,不能一次全部读取到内存中,每次读取1024个字节
            data = f1.read(1024)
            if not data:
                break
            f2.write(data)


def get_file_md5(f):
    '''
    传入文件句柄,返回文件内容的md5值
    :param f: 文件打开的句柄
    :return: 文件内容的md5值
    '''
    md5 = hashlib.md5()
    while True:
        # 读取大文件的时,不能一次全部读取到内存中,每次读取1024个字节
        data = f.read(1024)
        if not data:
            break
        md5.update(data)
    return md5.hexdigest()


if __name__ == '__main__':
    # 判断是否存在备份文件
    if 'rainbow_bak.txt' not in os.listdir('.'):
        copy_file('rainbow.txt', 'rainbow_bak.txt')
        with open('rainbow.txt', 'rb') as f1, open('rainbow_bak.txt', 'rb') as f2:
            file1_md5 = get_file_md5(f1)
            file2_md5 = get_file_md5(f2)
            # print(file1_md5)
            # print(file2_md5)
            # 当源文件和目标文件md5值不匹配,则备份异常;
            if file1_md5 != file2_md5:
                print('33[31;1m文件备份异常!33[0m')
            else:
                print('33[32;1m文件备份完成.33[0m')
    else:
        print('33[33;1m文件备份已存在.33[0m')
文件备份并校验md5值
原文地址:https://www.cnblogs.com/hukey/p/9591792.html