当前位置: 首页 > news >正文

使用Python自动备份重要文件:一步一步的教程

目录

  • 1 重要性说明
    • 1.1 数据丢失的风险
    • 1.2 自动化备份的好处
    • 1.3 提高数据安全性和恢复力
  • 2 工具和技术简介
    • 2.1 os库
    • 2.2 shutil库
    • 2.3 glob库
    • 2.4 pathlib库
  • 3 备份策略设计
    • 3.1 全备份
    • 3.2 增量备份
    • 3.3 差异备份
    • 3.4 根据需求选择备份策略
  • 4 编写备份脚本
    • 4.1 步骤拆解
      • 步骤 1: 选择源文件夹和目标备份位置
      • 步骤 2: 使用`os`和`shutil`库遍历、筛选和复制文件
      • 步骤 3: 处理异常
      • 步骤 4: 根据文件的修改日期或类型进行筛选
    • 4.2 备份完整版本
      • 情形一:实现文件全备份
      • 情形二:实现文件增量备份
      • 情形三:实现文件差异备份
  • 5 自动化和调度
    • 5.1 在Windows中使用任务计划程序
    • 5.2 在Linux中使用cron作业
    • 5.3 环境准备或清理工作
    • 5.4 常见问题及解决方案
  • 6 测试和验证
    • 6.1 设计测试计划
    • 6.2 测试过程中的关键点
    • 6.3 模拟不同的故障情况
      • 故障排除和系统优化
    • 6.4 持续改进策略
  • 写在最后

在数字化时代,数据是非常宝贵的资源。从个人照片和文档到重要的工作文件,我们的数字资产对我们来说越来越重要。因此,确保这些文件的安全就显得尤为关键。本文将引导您如何使用Python自动备份重要文件,确保您的数据安全。

1 重要性说明

在当今数字化的世界里,数据无疑成为了个人和企业最宝贵的资产之一。从珍贵的个人记忆到关键的商业信息,数据的价值无法估量。然而,数据的脆弱性也随之显现,硬件故障、软件故障、人为错误、自然灾害等因素都可能导致数据丢失,给个人和企业带来无法挽回的损失。因此,定期备份文件显得至关重要。

1.1 数据丢失的风险

数据丢失可以由多种因素引起,包括但不限于:

  • 硬件故障:硬盘、SSD等存储设备有其物理寿命,过度使用或意外损坏都可能导致数据丢失。
  • 软件故障:系统崩溃、软件冲突或恶意软件攻击可能导致文件损坏或丢失。
  • 人为错误:误删除文件或格式化存储设备是常见的数据丢失原因。
  • 自然灾害:火灾、洪水、地震等自然灾害可能摧毁存储数据的物理介质。

1.2 自动化备份的好处

自动化备份提供了一种高效、可靠的方式来保护数据免受上述风险的威胁:

  • 减少人为失误:自动化过程减少了人为操作的需要,从而降低了因操作失误导致数据丢失的风险。
  • 保证备份的一致性和及时性:自动化备份可定期执行,确保数据的最新状态被及时保存,无需人工干预。
  • 增强数据安全:通过自动化备份,可以将数据存储在多个位置,即使一个备份失败或损坏,其他备份仍然可用。

1.3 提高数据安全性和恢复力

自动化备份不仅可以防止数据丢失,还能在发生不可预见的事件时迅速恢复数据,保障日常工作和个人数据的连续性。例如,在企业环境中,数据的丢失可能导致业务中断,影响公司的财务状况和市场地位。对于个人来说,珍贵的记忆和重要文件的丢失同样是无法接受的。

通过实施自动化备份策略,可以大大提高数据的恢复力。即使在硬件故障或自然灾害等极端情况下,也能够通过备份数据快速恢复正常操作,最小化对业务或个人生活的影响。

2 工具和技术简介

在Python中,有几个库和技术对于实现自动化文件备份特别重要。这些工具不仅强大而且灵活,可以帮助开发者轻松地编写脚本来自动化备份文件和目录。下面将详细介绍这些库和技术,以及它们在文件备份过程中的应用。

2.1 os库

os库是Python标准库的一部分,提供了丰富的方法来与操作系统交互。通过os库,您可以执行文件和目录的创建、删除、修改等操作。它还允许您获取系统相关信息,如环境变量、当前工作目录等。

在文件备份过程中,os库主要用于处理文件路径和目录结构。例如,使用os.walk()函数可以遍历指定目录及其所有子目录,获取每个目录中的文件和子目录列表,这对于实现全目录备份非常有用。

2.2 shutil库

shutil库提供了一系列高级文件操作函数。与os库不同,shutil专注于文件的复制和移动等操作,可以说是在文件操作方面os库的有力补充。

使用shutil.copy()shutil.copy2()可以复制文件,而shutil.copytree()则可以复制整个目录树。如果需要移动文件或目录,可以使用shutil.move()。这些函数在实现文件备份时非常实用,特别是在需要复制大量文件或目录结构时。

2.3 glob库

glob库用于根据特定模式搜索匹配的文件路径。它提供了一个函数glob.glob(),该函数接受一个通配符模式作为输入,返回所有匹配的文件路径列表。这对于在备份过程中选择特定类型的文件非常有用,例如,仅备份所有JPEG图片或所有文档文件。

2.4 pathlib库

pathlib库是Python 3.4及以上版本引入的现代文件路径库,提供了面向对象的方式来处理文件系统路径。与传统的os.path模块相比,pathlib更加直观和易于使用。

使用pathlib,可以轻松地构建路径、检查路径存在性、创建新目录、遍历目录等。例如,Path.glob()方法提供了类似glob库的功能,但以更为优雅的方式。pathlib在编写备份脚本时提供了极大的便利,特别是在处理路径和目录结构时。

3 备份策略设计

在设计自动化文件备份系统时,选择合适的备份策略是至关重要的。备份策略的选择不仅影响到备份的效率和可靠性,还关系到数据恢复的便捷性以及存储成本。以下是三种常见备份策略的介绍,包括它们的定义、优缺点以及适用场景。

3.1 全备份

定义:全备份是指复制所有选定的文件和目录,不论这些文件自上次备份以来是否已被修改。

优点

  • 数据恢复快速,因为所有数据都存储在同一个备份集中。
  • 简化了备份和恢复过程。

缺点

  • 需要较大的存储空间。
  • 备份过程耗时更长。

适用场景:适用于数据量不大,或者对数据恢复时间要求较高的场景。

3.2 增量备份

定义:增量备份仅备份自上次任何类型备份之后发生变化的文件。

优点

  • 节省存储空间,因为只备份新修改或新增的文件。
  • 备份速度快。

缺点

  • 数据恢复时间较长,需要先恢复最近的全备份,然后依次恢复所有相关的增量备份。
  • 管理增量备份文件可能比较复杂。

适用场景:适用于数据变化频繁,但每次变化量不大的环境。

3.3 差异备份

定义:差异备份备份自上次全备份以来发生变化的所有文件。

优点

  • 比全备份节省存储空间,因为只备份有变化的文件。
  • 数据恢复比增量备份快,因为只需恢复最近的全备份和最近的差异备份。

缺点

  • 存储需求随时间增加而增加,直到进行下一次全备份。
  • 备份时间长于增量备份。

适用场景:适合数据量较大,更新频率适中的环境。

3.4 根据需求选择备份策略

在选择备份策略时,需考虑以下因素:

  • 备份频率:数据更新的频率高,则可能更适合增量备份或差异备份。
  • 数据重要性:对于极其重要的数据,可能需要频繁的全备份以确保数据安全。
  • 存储空间限制:存储空间有限时,增量备份或差异备份可以是更好的选择。
  • 数据恢复需求:如果需要快速恢复数据,全备份可能是更好的选择。

4 编写备份脚本

编写一个自动化文件备份脚本是一个很好的方式来保护你的数据免受意外丢失。下面是如何使用Python及其osshutil库来实现这一目标的步骤。

4.1 步骤拆解

步骤 1: 选择源文件夹和目标备份位置

首先,确定你想要备份的文件夹(源文件夹)以及你想要将备份存储在哪里(目标备份位置)。这两个路径可以硬编码在你的脚本中,或者为了提高灵活性,可以通过命令行参数、配置文件或环境变量来指定。

source_folder = '/path/to/source'
backup_folder = '/path/to/backup'

步骤 2: 使用osshutil库遍历、筛选和复制文件

接下来,使用os库遍历源文件夹中的所有文件和子文件夹,然后使用shutil库复制这些文件到目标备份位置。

import os
import shutildef backup_files(source, target):for root, dirs, files in os.walk(source):for file in files:file_path = os.path.join(root, file)rel_path = os.path.relpath(file_path, source)dest_path = os.path.join(target, rel_path)os.makedirs(os.path.dirname(dest_path), exist_ok=True)shutil.copy(file_path, dest_path)backup_files(source_folder, backup_folder)

步骤 3: 处理异常

备份过程中可能会遇到各种异常情况,比如目标位置的存储空间不足。为了处理这些异常,可以使用try-except语句来捕获和处理shutil复制过程中可能抛出的异常。

try:shutil.copy(file_path, dest_path)
except shutil.Error as e:print(f'Error: {e}')
except IOError as e:print(f'Error: {e.strerror}')

步骤 4: 根据文件的修改日期或类型进行筛选

如果你需要根据文件的修改日期或类型进行筛选,可以使用os.path.getmtime()函数获取文件的最后修改时间,并使用文件扩展名来筛选特定类型的文件。

import timedef should_backup(file_path, days=30, ext=None):# 检查文件类型if ext is not None and not file_path.endswith(ext):return False# 检查文件修改日期last_modified = os.path.getmtime(file_path)if (time.time() - last_modified) / 86400 > days:return Falsereturn True

backup_files函数中,使用should_backup函数来决定是否备份特定文件。

4.2 备份完整版本

要实现这些备份情形的Python代码,我们可以基于之前的讨论构建不同的脚本。以下是针对每种情形的简化示例。

情形一:实现文件全备份

import os
import shutildef full_backup(source, target):if not os.path.exists(target):os.makedirs(target)for root, dirs, files in os.walk(source):for file in files:src_path = os.path.join(root, file)dst_path = src_path.replace(source, target, 1)os.makedirs(os.path.dirname(dst_path), exist_ok=True)shutil.copy2(src_path, dst_path)source_folder = '/path/to/source'
backup_folder = '/path/to/backup/full'
full_backup(source_folder, backup_folder)

情形二:实现文件增量备份

增量备份只备份自上次备份之后已更改的文件。为了跟踪这些变化,你需要存储每次备份的时间戳。

import os
import shutil
import timedef incremental_backup(source, target, last_backup_time):if not os.path.exists(target):os.makedirs(target)for root, dirs, files in os.walk(source):for file in files:src_path = os.path.join(root, file)if os.path.getmtime(src_path) > last_backup_time:dst_path = src_path.replace(source, target, 1)os.makedirs(os.path.dirname(dst_path), exist_ok=True)shutil.copy2(src_path, dst_path)source_folder = '/path/to/source'
backup_folder = '/path/to/backup/incremental'
# 假设上次备份时间是最近一周(604800秒)
last_backup_time = time.time() - 604800
incremental_backup(source_folder, backup_folder, last_backup_time)

情形三:实现文件差异备份

差异备份备份自上次全备份以来更改的所有文件。这需要跟踪上次全备份的时间戳。

import os
import shutil
import timedef differential_backup(source, target, last_full_backup_time):if not os.path.exists(target):os.makedirs(target)for root, dirs, files in os.walk(source):for file in files:src_path = os.path.join(root, file)if os.path.getmtime(src_path) > last_full_backup_time:dst_path = src_path.replace(source, target, 1)os.makedirs(os.path.dirname(dst_path), exist_ok=True)shutil.copy2(src_path, dst_path)source_folder = '/path/to/source'
backup_folder = '/path/to/backup/differential'
# 假设上次全备份时间是一个月前
last_full_backup_time = time.time() - (4 * 604800)
differential_backup(source_folder, backup_folder, last_full_backup_time)

5 自动化和调度

要将Python编写的文件备份脚本自动化运行,你可以在Windows使用任务计划程序,在Linux中使用cron作业来调度备份任务。下面是在这两个操作系统中设置定时任务的具体步骤。

5.1 在Windows中使用任务计划程序

  1. 打开任务计划程序:点击开始菜单,搜索并打开“任务计划程序”。

  2. 创建新任务:在右侧的“操作”菜单中,选择“创建基本任务…”或“创建任务…”以开始新任务的创建过程。

  3. 设置任务触发器:在创建任务的过程中,系统会要求你选择任务的触发器,如每天、每周等。根据你的备份需求选择合适的触发器。

  4. 设置任务操作:当被要求添加一个操作时,选择“启动程序”,然后浏览并选择你的Python解释器(例如,python.exe),在“添加参数(可选)”处输入你的脚本名字,如backup_script.py,并设置脚本所在的文件夹作为“起始于(可选)”位置。

  5. 完成任务创建:按照提示完成任务的创建,你可以设置其他选项,如任务完成后的行为、失败重试策略等。

  6. 测试任务:创建完成后,你可以手动运行任务以测试脚本是否按预期执行。

5.2 在Linux中使用cron作业

  1. 编辑crontab文件:在终端中输入crontab -e命令来编辑当前用户的cron作业。如果是第一次使用,可能会要求选择一个文本编辑器。

  2. 添加定时任务:在crontab文件中,你可以添加一个新的行来定义你的备份任务。cron作业的格式为:

    * * * * * /usr/bin/python3 /path/to/your/backup_script.py
    

    这里的五个星号分别代表分钟、小时、日、月、星期的时间设置。例如,如果你想让脚本每天凌晨1点执行,可以写为:

    0 1 * * * /usr/bin/python3 /path/to/your/backup_script.py
    
  3. 保存并退出编辑器:保存crontab文件并退出编辑器,cron将自动应用新的定时任务。

  4. 测试任务:确保脚本具有执行权限,并测试脚本是否能被正确调用。

5.3 环境准备或清理工作

对于一些特定的备份任务,你可能需要在任务执行前后进行环境的准备或清理工作。这可以通过在脚本中添加相应的逻辑来实现,或者在Windows的任务计划程序和Linux的cron作业中添加额外的步骤来执行这些操作。

5.4 常见问题及解决方案

  • 任务执行权限问题:确保你的脚本文件和调用的Python解释器具有适当的执行权限。
  • 环境变量问题:可能需要在任务或脚本中明确设置环境变量,特别是当Python解释器或脚本依赖于特定的环境变量时。
  • 日志记录:为了方便调试,可以在脚本中添加日志记录逻辑,或者将标准输出和错误输出重定向到日志文件中。

6 测试和验证

在开发自动化文件备份系统后,进行全面的测试和验证是确保其可靠性和有效性的关键步骤。以下是如何进行这些测试和验证的详细介绍:

6.1 设计测试计划

  1. 定义测试目标:明确你希望通过测试验证的目标,例如备份的完整性、数据一致性、恢复时间等。
  2. 覆盖备份和恢复场景:列出所有可能的备份和恢复场景,包括全备份、增量备份、差异备份以及各种不同的恢复需求。
  3. 模拟故障情况:预设一系列故障情况,如文件意外删除、文件损坏、硬件故障等,以测试备份系统在实际情况下的表现。
  4. 计划测试执行:为每个测试场景规划具体的执行步骤、所需资源和预期结果。

6.2 测试过程中的关键点

  • 备份完整性:验证备份文件是否完整无缺失。可以通过比较源文件和备份文件的校验和来实现。
  • 数据一致性验证:确保备份数据与源数据在内容上完全一致,无任何误差。这通常需要在数据未被更改的情况下进行验证。
  • 恢复时间评估:评估从备份中恢复数据所需的时间,确保它符合预期和业务需求。
  • 性能测试:评估备份和恢复操作对系统性能的影响,确保备份活动不会对正常运营造成不可接受的干扰。

6.3 模拟不同的故障情况

通过模拟文件损坏、硬件故障等不同的故障情况,可以验证备份系统的鲁棒性。这些测试应该能够证明在发生意外时,系统能够有效地恢复数据,且数据的完整性和一致性得到保障。

故障排除和系统优化

在测试过程中发现问题后,应立即进行故障排除。这可能涉及查看日志文件、验证配置设置或重新执行某些操作。根据发现的问题,进行必要的系统优化,比如改进备份策略、提升数据传输效率或优化存储管理。

6.4 持续改进策略

  • 定期审查:定期审查备份策略和过程,确保它们仍然符合业务需求和技术环境。
  • 技术更新:随着新技术和工具的出现,更新备份系统以利用这些进步,提高效率和可靠性。
  • 反馈循环:建立一个反馈机制,以收集用户和管理员对备份系统的反馈,作为持续改进的依据。

写在最后

建立一个自动化的文件备份系统是保护您珍贵数据的有效方式。通过使用Python及其强大的库,您可以轻松实现这一目标。本文介绍了备份文件的重要性、选择合适的备份策略、编写备份脚本以及如何自动化和调度备份任务。通过跟随本教程,您不仅能够保护自己免受数据丢失的威胁,还能提高数据管理的效率。记住,定期测试和验证您的备份系统至关重要,以确保在紧急情况下它们能够被可靠地恢复。保护您的数据,从今天开始!

相关文章:

使用Python自动备份重要文件:一步一步的教程

目录 1 重要性说明1.1 数据丢失的风险1.2 自动化备份的好处1.3 提高数据安全性和恢复力 2 工具和技术简介2.1 os库2.2 shutil库2.3 glob库2.4 pathlib库 3 备份策略设计3.1 全备份3.2 增量备份3.3 差异备份3.4 根据需求选择备份策略 4 编写备份脚本4.1 步骤拆解步骤 1: 选择源文…...

python学习

Python面试题大全 - 50道经典面试题 - 掘金 yoloV5:yolov5: YOLOv5 汉化版,保持官方同步更新 yoloV8使用案例:用YOLOv8一站式解决图像分类、检测、分割…… - 掘金 yoloV8使用案例douyin:https://www.douyin.com/user/self?modal_id7276287878194285…...

【使用redisson完成延迟队列的功能】使用redisson配合线程池完成异步执行功能,延迟队列和不需要延迟的队列

1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…...

Linux 性能分析工具 perf 的使用指南

什么是perf,可以用来干什么 perf 是 Linux 内核的性能分析工具集,它可以用来监控和分析系统和应用程序的性能。perf 提供了一系列功能强大的子命令,可以帮助开发者和系统管理员: 监控 CPU 使用率:识别最消耗 CPU 的代…...

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解

往期回顾: 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号-CSDN博客 【QT入门】 Qt内存管理机制详解-CSDN博客 【QT入门】 Qt代码创建布局之水平布局、竖直布局详解 先看两个问题: 1、ui设计器设计界面很方便&#xf…...

C 传递数组给函数

如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。 方式 1…...

二次开发Flink-coGroup算子支持迟到数据通过测输出流提取

目录 1.背景 2.coGroup算子源码分析 2.1完整的coGroup算子调用流程 2.2coGroup方法入口 2.3 CoGroupedStreams对象分析 2.4WithWindow内部类分析 2.5CoGroupWindowFunction函数分析 3.修改源码支持获取迟到数据测输出流 3.1复制CoGroupedStreams 3.2新增WithWindow.si…...

【容器源码篇】Set容器(HashSet,LinkedHashSet,TreeSet的特点)

文章目录 ⭐容器继承关系&#x1f339;Set容器&#x1f5d2;️HashSet源码解析构造方法public HashSet()public HashSet(Collection<? extends E> c)public HashSet(int initialCapacity, float loadFactor)HashSet(int initialCapacity, float loadFactor, boolean dum…...

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…...

AI大模型学习:AI大模型在特定领域的应用

1. 引言 随着人工智能技术的飞速发展&#xff0c;AI大模型已成为推动科技创新的重要力量。从自然语言处理到图像识别&#xff0c;再到复杂决策支持系统&#xff0c;AI大模型在多个领域展现出了前所未有的潜力和应用广度。本文旨在深入探讨AI大模型在特定领域中的应用&#xff0…...

Channel 结合 Select 使用

在Go语言中&#xff0c;channel和select结合使用是一种强大的并发模式。channel允许在不同的goroutine之间安全地传递消息&#xff0c;而select使得goroutine可以同时等待多个通信操作&#xff08;channel操作&#xff09;。 select语句等待多个channel操作中的任意一个完成。…...

LeetCode-1669题:合并两个链表(原创)

【题目描述】 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果链表的头指针。 【…...

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…...

机器学习——元学习

元学习&#xff08;Meta Learning&#xff09;是一种机器学习方法&#xff0c;旨在使模型能够学习如何学习。它涉及到在学习过程中自动化地学习和优化学习算法或模型的能力。元学习的目标是使模型能够从有限的训练样本中快速适应新任务或新环境。 在传统的机器学习中&#xff…...

day56 动态规划part13

300. 最长递增子序列 中等 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,…...

Mybatis别名 动态sql语句 分页查询

给Mybatis的实体类起别名 给Mybatis的xml文件注册mapper映射文件 动态sql语句 1 if 2 choose 3 where 4 foreach 一&#xff09;if 查询指定名称商品信息 语法&#xff1a; SELECT * FROM goods where 11 <if test "gName!null"> and g.g_name like co…...

【算法题】三道题理解算法思想--滑动窗口篇

滑动窗口 本篇文章中会带大家从零基础到学会利用滑动窗口的思想解决算法题&#xff0c;我从力扣上筛选了三道题&#xff0c;难度由浅到深&#xff0c;会附上题目链接以及算法原理和解题代码&#xff0c;希望大家能坚持看完&#xff0c;绝对能有收获&#xff0c;大家有更好的思…...

go env 命令详解

文章目录 1.简介2.格式3.示例4.环境变量参考文献 1.简介 go env 用于查看和设置 Go 环境变量。 默认情况下 go env 输出格式为 Shell 脚本格式&#xff08;如 Windows 上是 batch 文件格式&#xff09;。如果指定变量名称&#xff0c;则只输出变量的值。 2.格式 go env [-j…...

flutter 单例模式

总的思想就是&#xff1a; 确保整个应用程序中只有一个 TranslationService 实例。 避免重复创建相同的实例,节省资源。 为整个应用程序提供一个全局访问点,方便在不同地方使用同一个实例。 1.类创建个实例 2.然后用构造函数赋值给实例 3.其他地方调用时返回实例 import pack…...

1.7.2 python练习题15道

1、求出1 / 1 1 / 3 1 / 5……1 / 99的和 (1分之一1分之三1分支5....) 2、用循环语句&#xff0c;计算2 - 10之间整数的循环相乘的值 &#xff08;2*3*4*5....10) 3、用for循环打印九九乘法表 4、求每个字符串中字符出现的个数如&#xff1a;helloworld 5、实现把字符串str …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...