百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

删库跑路?在我这里永远不可能!我有自动备份文件的程序!

toyiye 2024-07-09 22:51 12 浏览 0 评论

该程序包含以下个文件:

Sync.py:主程序

Sync1.ini:配置文件

Logger1.py:记录器支持的模块

Sync.log是sync.py创建的文件。

现在让我们了解sync.py的代码,看看它是如何工作的。

1.导入要使用的基本库。

Import configparser.

Import time.

Import shutil.

Import hashlib.

From the distutils.dir_util import copy_tree.

From the collections, import OrderedDict.

Import the OS.

Import logger1 as log1.

以下代码为读取Sync1.ini文件:

def ConfRead():

config = configparser.ConfigParser()

config.read(“Sync1.ini”)

return (dict(config.items(“Para”)))

下面显示的是从Sync.ini文件中获得的一些变量:

All_Config = ConfRead()

Freq = int(All_Config.get(“freq”))*60

Total_time = int(All_Config.get(“total_time”))*60

repeat = int(Total_time/Freq)

图1:使用pyinstaller创建一个exe文件

图2:将exe文件放在Windows文件夹中

以下函数md5用于计算文件的哈希值。如果修改文件,则名称保持不变,但哈希值会更改。

def md5(fname,size=4096):

hash_md5 = hashlib.md5()

with open(fname, “rb”) as f:

for chunk in iter(lambda: f.read(size), b””):

hash_md5.update(chunk)

return hash_md5.hexdigest()

以下函数使用中介复制整个目录:

def CopyDir(from1, to):

copy_tree(from1, to)

以下函数只将一个文件复制到目标位置:

def CopyFiles(file, path_to_copy):

shutil.copy(file,path_to_copy)

图3:CMD默认路径

图4:同步命令

以下函数创建一个字典,其中包含带有文件哈希的文件名。该函数获取源位置并生成所有文件的字典:

def OriginalFiles():

drive = All_Config.get(“from”)

Files_Dict = OrderedDict()

print (drive)

for root, dir, files in os.walk(drive, topdown=True):

for file in files:

file = file.lower()

file_path = root+’\\’+file

try:

hash1 = md5(file_path,size=4096)

#modification_time = int(os.path.getmtime(file_path))

rel_path = file_path.strip(drive)

Files_Dict[(hash1,rel_path)]= file_path

except Exception as e :

log1.logger.error(‘Error Original files: {0}’.format(e))

return Files_Dict

以下的函数创建一个字典,其中包含带有文件哈希的文件名。该函数获取目标位置并获取所有当前文件并生成字典。如果根文件夹不存在,则调用CopyDir函数。

def Destination():

Files_Dict = OrderedDict()

from1 = All_Config.get(“from”)

to= All_Config.get(“to”)

dir1= from1.rsplit(“\\”,1)[1]

drive = to+dir1

#print (drive)

try:

if os.path.isdir(drive):

for root, dir, files in os.walk(drive, topdown=True):

for file in files:

file = file.lower()

file_path = root+’\\’+file

try:

hash1 = md5(file_path,size=4096)

#modification_time = int(os.path.getmtime(file_path))

rel_path = file_path.strip(drive)

Files_Dict[(hash1,rel_path)]= file_path

except Exception as e :

log1.logger.error(‘Error Destination foor loop: {0}’.format(e))

return Files_Dict

else :

CopyDir(from1,drive)

log1.logger.info(‘Full folder: {0} copied’.format(from1))

return None

except Exception as e :

log1.logger.error(‘Error Destination: {0}’.format(e))

以下函数定义如下逻辑:

  • 如果已使用文件夹创建文件。
  • 如果文件已被修改。

图5:复制完整文件夹

图6:修改文件后

在这两种情况下,下面的代码只是比较原始字典和目标字典。如果创建或修改了任何文件,则解释器将从源复制文件并将其粘贴到目标中。

def LogicCompare():

from1 = All_Config.get(“from”)

to= All_Config.get(“to”)

Dest_dict = Destination()

if Dest_dict:

Source_dict = OriginalFiles()

remaining_files = set(Source_dict.keys())- set(Dest_dict.keys())

remaining_files= [Source_dict.get(k) for k in remaining_files]

for file_path in remaining_files:

try:

log1.logger.info(‘File: {0}’.format(file_path))

dir, file = file_path.rsplit(“\\”,1)

rel_dir = from1.rsplit(“\\”,1)[1]

rel_dir1 = dir.replace(from1,””)

dest_dir = to+rel_dir+”\\”+rel_dir1

if not os.path.isdir(dest_dir):

os.makedirs(dest_dir)

CopyFiles(file_path, dest_dir)

except Exception as e:

log1.logger.error(‘Error LogicCompare: {0}’.format(e))

下面的代码使用循环来反复运行代码:

i = 0

while True:

if i >= repeat:

break

LogicCompare()

time.sleep(Freq)

i = i +1

来看Sync1.ini的文件内容:

[Para]

From = K:\testing1

To = E:\

Freq = 1

Total_time = 5

在上面的代码中:

From:指定源目录并获取testing1文件夹的备份。

To:指定备份的位置。

Freq:在指定多少分钟后进行备份。

Total_time:运行Total_time分钟的代码时长。

我们来看看logger1.py的代码:

import logging

logger = logging.getLogger(“Mohit”)

logger.setLevel(logging.INFO)

fh = logging.FileHandler(“Sync.log”)

formatter = logging.Formatter(‘%(asctime)s - %(levelname)s - %(message)s’)

fh.setFormatter(formatter)

logger.addHandler(fh)

上面的代码非常简单,可以在INFO模式下使用。

如果你不想使用解释器来运行代码,可以创建一个Windows exe文件,这将作为命令。转换它可以用pyinstaller,我已经安装了那个模块。

图1中的命令将您的代码转换为exe文件,运行它不需要Python解释器。

图7:创建新文件后

图8:笔驱动器存在时的输出

如何运行该程序

执行如图1所示的命令后,检查名为Sync的文件夹。在此文件夹中,检查名为dist的文件夹,您将在其中获取.exe文件。现在复制此.exe文件并将其粘贴到C:/ Windows文件夹中,如图2所示。

现在打开命令提示符。检查当前文件夹,如图3所示。在我的PC中,默认提示路径为c:/ user / Mohit。在您的PC中,它可能会有所不同。因此,复制Sync1.ini文件并将其粘贴到c:/ user / <your-name>文件夹中。

现在插上外接笔式驱动器。检查笔式驱动器盘符,它在我的PC中是E.

根据您的PC配置,更改放置在C:/ user / <your-name>目录中的Sync1.ini参数。

现在打开命令提示符并键入命令,如图4所示。

现在检查你的驱动器,查看sync.log,它是在文件夹c:/ user / <your-name>中被创建的。

有四种情况可能:

  1. 当驱动器中没有整个文件夹时(图5)。
  2. 修改现有文件时(图6)。
  3. 创建新文件时(图7)。
  4. 最后一种情况是当笔驱动器不存在时的负面测试案例(图8)。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码