python实现定时自动备份文件到其他主机的实例代码


Posted in Python onFebruary 23, 2018

定时将源文件或目录使用WinRAR压缩并自动备份到本地或网络上的主机

1.确保WinRAR安装在默认路径或者把WinRAR.exe添加到环境变量中

2.在代码里的sources填写备份的文件或目录,target_dir填写备份目的目录

3.delete_source_file为备份完后是否删除源文件(不删除子文件夹)

4.备份成功/失败后生成备份日志

按照格式,填写源目的:

sources = [r'E:\目录1', r'E:\目录2\b.txt'] #例:= [ r'E:\test\1234.txt', r'E:\test1']
target_dir = r'\\10.1.5.227\共享\备份'   #例:= r'D:\备份' 或 = r'\\10.1.5.227\共享目录'
delete_source_file = False        #False/True

手动运行三次,已经有两个备份zip了

python实现定时自动备份文件到其他主机的实例代码

打开log查看为什么少了一个

python实现定时自动备份文件到其他主机的实例代码

可以看到目录1备份失败了,细看发现,目录1下的a.txt没有权限(读取),是因为用户对该文件没有权限。

如果该目录或者子目录下有一个没有权限,会导致整个目录都不能备份, 日志看到a.txt没有权限.

第二次备份的时候将源文件删除后,第三次备份就没有文件备份了

接下来将脚本程序添加到win的计划任务里,就能实现定时自动备份辣<( ̄︶ ̄)>

python实现定时自动备份文件到其他主机的实例代码

把代码文件添加进来,同时也可以在这里添加参数-d, 指明备份完后删除源文件

python实现定时自动备份文件到其他主机的实例代码

完整代码

python3.0

# -*- coding=utf-8 -*-
#进行了一场py/etherchannel
import os, sys
import time
import logging
sources = [r'E:\视频笔记', r'E:\目录\b.txt'] #例:= [ r'E:\test\1234.txt', r'E:\test1']
target_dir = r'\\10.1.5.227\共享\备份'    #例:= r'D:\备份' 或 = r'\\10.1.5.227\共享目录'
delete_source_file = False         #False/True
def Init_Logging(path):
  logging.basicConfig(level=logging.INFO, 
    format='%(asctime)s %(levelname)-8s %(message)s',  
    filename=path + '\\' + 'log.txt', 
    filemode='a',
    datefmt='%Y-%m-%d %X')
def Ctypes(message, title):
  import ctypes
  ctypes.windll.user32.MessageBoxA(0,message.encode('gb2312'), \
  title.encode('gb2312'),0)
  sys.exit()
def Check_Dir_Permit(dirs, dirc_permit=True, root=''):
  for dirc in dirs:
    dirc = os.path.join(root,dirc)
    try:
      os.chdir(dirc)
    except IOError as e:
      logging.error("找不到指定文件或没有权限 >>> " + str(e))
      dirc_permit = False
  return dirc_permit
def Create_Directory(dir):
  if not os.path.exists(dir):
    try:
      os.mkdir(dir)
      print('Successfully created directory',dir)
    except IOError as e:
      Ctypes(u"target_dir 目录路径不存在 ", u' 错误')
  assert Check_Dir_Permit([dir]), Ctypes(u"target_dir 没有权限 ", u' 错误')
  return dir
def Check_File_Permit(files, file_permit=True, root=''):
  for filename in files:
    file = os.path.join(root,filename)
    try:
      f = open(file)
      f.close()
    except IOError as e:
      logging.error("找不到指定文件或没有权限 >>> " + str(e))
      file_permit = False
  return file_permit
def Permit_Source(sources):
  allow_sources = []
  disallow_sources = []
  for source in sources:
    file_permit = True
    dirc_permit = True
    for (root, dirs, files) in os.walk(source):
      file_permit = Check_File_Permit(files, file_permit,root=root)
      dirc_permit = Check_Dir_Permit(dirs, dirc_permit,root=root)
    if os.path.isdir(source) and file_permit and dirc_permit or \
      os.path.isfile(source) and Check_File_Permit([source], file_permit):
      allow_sources.append(source)
    else:
      disallow_sources.append(source)
  return (allow_sources,disallow_sources)
def Delete_Files(allow_sources):
  for source in allow_sources:
    if os.path.isdir(source):
      command = 'del /a/s/f/q ' + source  #/s:也把子文件夹的文件一并删除
      if os.system(command) == 0:
        logging.info('del: ' + str(source))
      else:
        logging.error(str(source) + ' 删除失败')
    else:
      command = 'del /a/f/q ' + source
      if os.system(command) == 0:
        logging.info('del: ' + str(source))
      else:
        logging.error(str(source) + ' 删除失败')
def Compress_Backup(target, source):
  target = target + '\\' + time.strftime('%Y%m%d%H%M%S') + '.rar'
  if os.path.exists(r"C:\Program Files (x86)\WinRAR\WinRAR.exe"):
    rar_command = r'"C:\Program Files (x86)\WinRAR\WinRAR.exe" A %s %s' % (target,' '.join(source)) #WinRAR.exe" A %s %s -r'加上-r是作用到子文件夹中同名的文件
  else:
    rar_command = 'WinRAR' + ' A %s %s' % (target,' '.join(source))
  if os.system(rar_command) == 0: 
    print('Successful backup to', target)
    logging.info(str(source) + ' 备份到 ' + str(target) + ' 成功')
    try:
      if delete_source_file or sys.argv[1] == '-d':
        Delete_Files(source)
    except IndexError:
      pass
  else:
    logging.error("备份失败:WinRAR出错,确认路径 或 压缩被中断")
    Ctypes(u"备份失败:WinRAR出错,确认路径 或 压缩被中断", u' 错误')
if __name__ == '__main__':
  target_dir = Create_Directory(target_dir)
  Init_Logging(target_dir)
  logging.info('=' * 80)
  allow_sources, disallow_sources = Permit_Source(sources)
  if allow_sources:
    Compress_Backup(target_dir, allow_sources)
  if disallow_sources:
    print(disallow_sources, ' 备份失败')
    logging.error(str(disallow_sources) + ' 备份失败')

总结

以上所述是小编给大家介绍的python实现定时自动备份文件到其他主机的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
解决python写的windows服务不能启动的问题
Apr 15 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python标准库inspect的具体使用方法
Dec 06 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
详解python和matlab的优势与区别
Jun 28 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
python 穷举指定长度的密码例子
Apr 02 Python
Python读写csv文件流程及异常解决
Oct 20 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 #Python
python3调用R的示例代码
Feb 23 #Python
python中kmeans聚类实现代码
Feb 23 #Python
python实现SOM算法
Feb 23 #Python
python实现k-means聚类算法
Feb 23 #Python
python写一个md5解密器示例
Feb 23 #Python
Python机器学习之K-Means聚类实现详解
Feb 22 #Python
You might like
php内存缓存实现方法
2015/01/24 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python 模拟购物车的实例讲解
2017/09/11 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
Sql面试题
2013/03/20 面试题
小学生检讨书大全
2014/02/06 职场文书
旅游市场营销方案
2014/03/09 职场文书
采购求职信
2014/03/17 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
学校标语口号大全
2015/12/26 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL