如何使用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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
go语言计算两个时间的时间差方法
Mar 13 Python
详解python时间模块中的datetime模块
Jan 13 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Python银行系统实战源码
Oct 25 Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 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
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
限制文本字节数js代码
2007/03/06 Javascript
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
Python表示矩阵的方法分析
2017/05/26 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
python自动生成证件号的方法示例
2021/01/14 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
民事调解书范文
2015/05/20 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
创业计划书之酒厂
2019/10/14 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python