如何使用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开发常用的一些开源Package分享
Feb 14 Python
python删除过期文件的方法
May 29 Python
Python图算法实例分析
Aug 13 Python
使用Python绘制图表大全总结
Feb 11 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
Python3 log10()函数简单用法
Feb 19 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
Python txt文件常用读写操作代码实例
Aug 03 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
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python使用knn实现特征向量分类
2018/12/26 Python
用Python解决x的n次方问题
2019/02/08 Python
Python 互换字典的键值对实例
2019/02/12 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
python编程的核心知识点总结
2021/02/08 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
高级工程师岗位职责
2013/12/15 职场文书
元宵晚会主持词
2014/03/25 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
新手入门Mysql--概念
2021/06/18 MySQL
Python可视化学习之seaborn调色盘
2022/02/24 Python