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 自动备份脚本内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Python自动备份脚本的示例代码
本文链接: https://lsjlt.com/news/175824.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0