Python 自動(dòng)備份腳本的示例代碼
一、前言
之前因?yàn)橐咔槌32恢罆?huì)不會(huì)被封在家里,又不想把電腦帶過(guò)來(lái)帶過(guò)去,就做了這個(gè)自動(dòng)備份的腳本。
功能如下:
- 自動(dòng)從指定根目錄里將找到的所有指定后綴名的文件備份到一個(gè)備份文件夾里;
- 將備份文件夾中的文件自動(dòng)和阿里云盤(pán)同步;
- 原文件目錄結(jié)構(gòu)不會(huì)改變;
- 可以屏蔽根目錄下一級(jí)中不想要的文件夾/文件,下多級(jí)的不行;
- 定時(shí)運(yùn)行;
二、代碼
創(chuàng)建了一個(gè)AutoTransfer類,這個(gè)類在初始化的時(shí)候會(huì)自動(dòng)讀取配置文件里的參數(shù),如果沒(méi)有配置文件也可以后續(xù)調(diào)用函數(shù)時(shí)來(lái)傳參。
調(diào)用類里的move_scripts函數(shù)可以將指定后綴名的文件備份到備份文件夾里。
調(diào)用ali_login函數(shù)登錄阿里云。
調(diào)用find_id函數(shù)可以根據(jù)阿里云盤(pán)里的文件夾名查找文件夾id,這個(gè)id后面要用。
調(diào)用sync_folder函數(shù)進(jìn)行同步,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
# 自動(dòng)從配置json里獲取參數(shù)
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=[]):
# 更新參數(shù)
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
# 檢查參數(shù)有無(wú)缺少
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):
"""
列舉文件根目錄下各文件路徑的函數(shù)。
: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()
接下來(lái)創(chuàng)建一個(gè).bat文件:
@echo off D: cd 腳本路徑 start python 腳本文件名.py exit
最后創(chuàng)建定時(shí)任務(wù)即可:

如果想每天看著它運(yùn)行,記得勾選“只在用戶登錄時(shí)運(yùn)行”。

到此這篇關(guān)于Python 自動(dòng)備份腳本的文章就介紹到這了,更多相關(guān)Python 自動(dòng)備份腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在django中實(shí)現(xiàn)分頁(yè)功能
這篇文章主要介紹了如何在django中實(shí)現(xiàn)分頁(yè)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
python腳本監(jiān)聽(tīng)域名證書(shū)過(guò)期時(shí)間并通知消息到釘釘(最新推薦)
這篇文章主要介紹了python腳本監(jiān)聽(tīng)域名證書(shū)過(guò)期時(shí)間并通知消息到釘釘(最新推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
關(guān)于sys.stdout和print的區(qū)別詳解
今天小編就為大家分享一篇關(guān)于sys.stdout和print的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
解決pycharm運(yùn)行時(shí)interpreter為空的問(wèn)題
今天小編就為大家分享一篇解決pycharm運(yùn)行時(shí)interpreter為空的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
django使用sqlite3統(tǒng)計(jì)前臺(tái)站點(diǎn)訪問(wèn)數(shù)量示例
這篇文章主要為大家介紹了django使用sqlite3統(tǒng)計(jì)前臺(tái)站點(diǎn)訪問(wèn)數(shù)量示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
PyCharm如何導(dǎo)入python項(xiàng)目的方法
這篇文章主要介紹了PyCharm如何導(dǎo)入python項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié),使用Pyinstaller打包Python項(xiàng)目包含了大量的坑,感興趣的可以一起來(lái)了解一下2020-06-06

