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 3支持mysqldb的解决方法
Feb 14 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python内建模块struct实例详解
Feb 02 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
Python中zipfile压缩包模块的使用
May 14 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
PHP 日期加减的类,很不错
2009/10/10 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Python中asyncore的用法实例
2014/09/29 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
Django跨域请求原理及实现代码
2020/11/14 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
创意婚礼策划方案
2014/05/18 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
辞职信范文大全
2015/03/02 职场文书
离婚起诉状范本
2015/05/19 职场文书
理想国读书笔记
2015/06/25 职场文书
Python OpenCV超详细讲解基本功能
2022/04/02 Python