Python 自动备份脚本的示例代码

 更新时间:2022年12月26日 09:58:51   作者:Sprite.Nym  
这篇文章主要介绍了Python 自动备份脚本,本文结合代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、前言

之前因为疫情常常不知道会不会被封在家里,又不想把电脑带过来带过去,就做了这个自动备份的脚本。

功能如下:

  • 自动从指定根目录里将找到的所有指定后缀名的文件备份到一个备份文件夹里;
  • 将备份文件夹中的文件自动和阿里云盘同步;
  • 原文件目录结构不会改变;
  • 可以屏蔽根目录下一级中不想要的文件夹/文件,下多级的不行;
  • 定时运行;

二、代码

创建了一个AutoTransfer类,这个类在初始化的时候会自动读取配置文件里的参数,如果没有配置文件也可以后续调用函数时来传参。

调用类里的move_scripts函数可以将指定后缀名的文件备份到备份文件夹里。

调用ali_login函数登录阿里云。

调用find_id函数可以根据阿里云盘里的文件夹名查找文件夹id,这个id后面要用。

调用sync_folder函数进行同步,file_id就是上面的文件夹id,flag表示同步方式,True代表以本地为主。

import os
import json
from tqdm import tqdm
from shutil import copy
from aligo import Aligo


class AutoTransfer:
    def __init__(self, config_file='transfer_config.json'):
        self.config_file = config_file
        # 自动从配置json里获取参数
        if os.path.exists(config_file):
            with open(config_file, mode='r', encoding='utf-8') as c:
                cfg = json.load(c)
            for k, v in cfg.items():
                setattr(self, k, v)

    def __setattr__(self, k, v):
        print(f"Current attribute '{k}' is '{v}'")
        self.__dict__[k] = v

    def move_scripts(self, org_root='', new_root='', blocks=[], exts=[]):
        # 更新参数
        if org_root:
            self.org_root = org_root
        if new_root:
            self.new_root = new_root
        if blocks:
            self.blocks = blocks
        if exts:
            self.exts = exts

        # 检查参数有无缺少
        missing_attr = [attr for attr in ['org_root', 'new_root', 'exts'] if attr not in self.__dict__.keys()]
        if missing_attr:
            raise AttributeError

        folders = os.listdir(self.org_root)
        backup_folders = [os.path.join(self.org_root, fd) for fd in folders if fd not in self.blocks]
        for fdr in tqdm(backup_folders):
            cur_files = self.list_dir(fdr)
            for f in cur_files:
                if os.path.splitext(f)[-1] in self.exts:
                    total_path = f.replace(self.org_root, self.new_root)
                    new_folder, f_name = os.path.split(total_path)
                    if not os.path.exists(new_folder):
                        os.makedirs(new_folder)
                    copy(f, total_path)

        self.remember_configs()

    @staticmethod
    def list_dir(cur_path: str):
        """
        列举文件根目录下各文件路径的函数。
        :param cur_path: 根目录。
        :return: 根目录下所有子目录里的所有文件。
        """
        file_paths = []
        for root, dirs, files in os.walk(cur_path):
            for file in files:
                file_paths.append(os.path.join(root, file))
        return file_paths

    def ali_login(self):
        self.aligo = Aligo()

    def find_id(self, target_name):
        for f in self.aligo.get_file_list():
            if f.name == target_name:
                return f.file_id

    def sync_folder(self, file_id='', flag=None):
        if file_id:
            self.file_id = file_id
        if flag:
            self.flag = flag
        self.remember_configs()
        self.aligo.sync_folder(self.new_root, self.file_id, self.flag)

    def remember_configs(self):
        config_dict = {k: v for k, v in self.__dict__.items() if
                       k in ['org_root', 'new_root', 'blocks', 'exts', 'file_id', 'flag']}
        with open(self.config_file, mode='w', encoding='utf-8') as f:
            json.dump(config_dict, f)

if __name__ == '__main__':
    at = AutoTransfer()
    at.move_scripts()
    # print(at.find_id('BF_projects'))
    at.ali_login()
    at.sync_folder()

接下来创建一个.bat文件:

@echo off

D:

cd 脚本路径

start python 脚本文件名.py

exit

最后创建定时任务即可:

如果想每天看着它运行,记得勾选“只在用户登录时运行”。

到此这篇关于Python 自动备份脚本的文章就介绍到这了,更多相关Python 自动备份脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python列表切片常用操作实例解析

    Python列表切片常用操作实例解析

    这篇文章主要介绍了Python列表切片常用操作实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python下的twisted框架入门指引

    Python下的twisted框架入门指引

    这篇文章主要介绍了Python下的twisted框架入门指引,twisted框架是一个异步机制的框架,也被许多Python教程所介绍,需要的朋友可以参考下
    2015-04-04
  • Python NumPy矩阵对象详解及方法

    Python NumPy矩阵对象详解及方法

    这篇文章主要介绍了Python NumPy矩阵对象详解及方法,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • Python3如何解决错误UnicodeDecodeError

    Python3如何解决错误UnicodeDecodeError

    当我们使用Python3来处理文本时,一个非常常见的问题就是UnicodeDecodeError,本文小编就来深入聊聊这个错误是怎么来的以及怎样来解决它吧
    2025-03-03
  • 如何用Python做一个微信机器人自动拉群

    如何用Python做一个微信机器人自动拉群

    这篇文章主要介绍了如何用Python做一个微信机器人自动拉群,微当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉进来。这样,联系人员的私人微信会添加大量陌生人,给其带来不必要的打扰,需要的朋友可以参考下
    2019-07-07
  • Python基础请求库urllib模块使用深入探究

    Python基础请求库urllib模块使用深入探究

    在Python中,urllib库是一个强大的模块,用于处理URLs,它包含了多个子模块,其中urllib.request是用于发出HTTP请求的核心组件,本文将深入探讨urllib的基本使用、高级功能以及一些实际场景的示例,方便更全面地了解这个重要的网络请求工具
    2024-01-01
  • python 获取计算机的网卡信息

    python 获取计算机的网卡信息

    这篇文章主要介绍了python 获取计算机的网卡信息的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2021-02-02
  • Python使用reportlab模块生成PDF格式的文档

    Python使用reportlab模块生成PDF格式的文档

    今天小编就为大家分享一篇关于Python使用reportlab模块生成PDF格式的文档,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python存储或读取json时如何引入额外的双引号和转义引号

    Python存储或读取json时如何引入额外的双引号和转义引号

    这篇文章主要介绍了Python存储或读取json时如何引入额外的双引号和转义引号问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python 加密与解密小结

    Python 加密与解密小结

    这篇文章主要介绍了Python 加密与解密,使用base64或pycrypto模块需要的朋友可以参考下
    2018-12-12

最新评论