如何使用Python脚本实现文件拷贝


Posted in Python onNovember 20, 2019

这篇文章主要介绍了如何使用Python脚本实现文件拷贝,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.实现目的

统一时间对服务器某文件夹内文件进行备份保存,如若备份成功则不提示任何错误,否则将以邮件的形式告知管理员,备份出错。

2.程序流程图

主要流程图

如何使用Python脚本实现文件拷贝

拷贝流程图

如何使用Python脚本实现文件拷贝

3.代码编写

1.MyMain函数

[root@Python CheckCopyFiles]# cat MyMain.py 
#!/usr/bin/env python

import os
import sys
import MyFileZip

def main() :
  dir1 = "/root/dir1"
  dir2 = "/root/dir2"

  if os.path.isdir(dir2) == False :
    os.mkdir(dir2)
  
  if os.path.isdir(dir1) :
    MyFileZip.FileCopy(dir1,dir2)
  else :
    sys.exit(-1)  

if __name__ == "__main__" :
  main()
[root@Python CheckCopyFiles]#

2.MyFile函数

[root@Python CheckCopyFiles]# cat MyFileZip.py
#!/usr/bin/env python

import zipfile
import time
import os
import MySendMail


def FileCopy(dir1,dir2) :
  try:
    NowDate = time.strftime("%Y-%m-%d")
    Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
    zf = zipfile.ZipFile(Zfile,'w')
  
    for filename in os.listdir(dir1) :
      if os.path.isfile(dir1 + '/' + filename) :
        zf.write(dir1 + '/' + filename)
        os.remove(dir1 + '/' + filename)
    
    zf.close()
  except:
    MySendMail.SamMail(NowDate,dir1,dir2)
[root@Python CheckCopyFiles]#

3.SendMail函数

[root@Python CheckCopyFiles]# cat MySendMail.py
#!/usr/bin/env python

import smtplib
import email.mime.text

def SamMail(NowDate,dir1,dir2) :
  HOST = "smtp.163.com"
  SUBJECT = "Copy File Warning"
  TO = "发送的帐号"
  FROM = "来自于账户"
  Remask = "Copy dirctory warning"

  msg = email.mime.text.MIMEText("""
  <html>
    <body>
      <h1>Warning</h1>
      <h2>Time:%s</h2> 
      <h2>Dirctory:%s</h2> 
      <h2>Remask:%s</h2> 
    </body>
  </html>
  """ % (NowDate,dir1,"Copy File Error"),"html","utf-8")

  msg['Subject'] = SUBJECT
  msg['From'] = FROM
  msg['TO'] = TO

  try:
    server = smtplib.SMTP()
    server.connect(HOST,'25')
    server.starttls()
    server.login("帐号","密码")
    server.sendmail(FROM,TO,msg.as_string())
    server.quit()
  except:
    print ("Send mail Error")
[root@Python CheckCopyFiles]#

4.实现效果

4.1 建立新的文件

[root@Python ~]# touch /root/dir1/7 /root/dir1/8
 [root@Python ~]#

4.2 执行代码

[root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py 
 [root@Python ~]#

4.3 查看文件

[root@Python ~]# ls -l /root/dir1 -a
 total 0
 drwxrwxrwx. 2 root root  6 Aug 27 09:26 .
 dr-xr-x---. 6 root root 201 Aug 27 09:26 ..
 [root@Python ~]#
[root@Python ~]# ls -l /root/dir2/
total 4
-rw-r--r--. 1 root root 218 Aug 27 09:28 logfile_2017-08-27.zip
[root@Python ~]# unzip -v /root/dir2/logfile_2017-08-27.zip 
Archive: /root/dir2/logfile_2017-08-27.zip
 Length  Method  Size Cmpr  Date  Time  CRC-32  Name
-------- ------ ------- ---- ---------- ----- -------- ----
    0 Stored    0  0% 08-27-2017 09:27 00000000 root/dir1/7
    0 Stored    0  0% 08-27-2017 09:27 00000000 root/dir1/8
--------     ------- ---              -------
    0        0  0%              2 files
[root@Python ~]#

由此可见,dir1中的文件已经备份至/root/dir2/logfile_2017-08-27.zip中,且已经删除了原文件

4.3 查看发送邮件效果

修改一下源码:

[root@Python CheckCopyFiles]# cat MyFileZip.py
#!/usr/bin/env python

import zipfile
import time
import os
import MySendMail


def FileCopy(dir1,dir2) :
  try:
    NowDate = time.strftime("%Y-%m-%d")
    Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
    zf = zipfile.ZipFile(Zfile,'w')
  
    for filename in os.listdir(dir1) :
      if os.path.isfile(dir1 + '/' + filename) :
        zf.write(dir1 + '/' + filename)
        os.remove(dir1 + '/' + filename)
    
    zf.close()
    sys.exit()
  except:
    MySendMail.SamMail(NowDate,dir1,dir2)
[root@Python CheckCopyFiles]#

22行 sys 模块并未导入,故一定会出错

执行效果如下:

[root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py 
 [root@Python ~]#

收到邮件的效果如下:

如何使用Python脚本实现文件拷贝

只要把脚本写入crontab,那样就可以按时执行了,例如:

[root@Python CheckCopyFiles]# crontab -l
 00 14 * * 0 /usr/bin/python /root/python/CheckCopyFiles/MyMain.py
 [root@Python CheckCopyFiles]#

意思是每周日14点调用/usr/bin/python 去执行/root/python/CheckCopyFiles/MyMain.py文件

至此,由python写的备份脚本已经全部完成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python监控网站运行异常并发送邮件的方法
Mar 13 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
Python3生成手写体数字方法
Jan 30 Python
python写入已存在的excel数据实例
May 03 Python
详解Python做一个名片管理系统
Mar 14 Python
Django框架 querySet功能解析
Sep 04 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
python是否适合网页编程详解
Oct 04 Python
用python发送微信消息
Dec 21 Python
python图片灰度化处理的几种方法
Jun 23 Python
Python笔记之代理模式
Nov 20 #Python
Python Tkinter模块 GUI 可视化实例
Nov 20 #Python
Python笔记之观察者模式
Nov 20 #Python
django 实现celery动态设置周期任务执行时间
Nov 19 #Python
python调用接口的4种方式代码实例
Nov 19 #Python
Python Django2.0集成Celery4.1教程
Nov 19 #Python
通过celery异步处理一个查询任务的完整代码
Nov 19 #Python
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python操作CouchDB的方法
2014/10/08 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
Python中常用信号signal类型实例
2018/01/25 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
甲方资料员岗位职责
2013/12/13 职场文书
优秀教师获奖感言
2014/01/31 职场文书
幼儿园家长评语
2014/02/10 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
写给父母的感谢信
2015/01/22 职场文书
大客户经理岗位职责
2015/04/09 职场文书
会议主持词开场白
2015/05/28 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android