如何使用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基础之I/O模型
May 11 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
Python 实现数据结构中的的栈队列
May 16 Python
python return逻辑判断表达式实现解析
Dec 02 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Python自动化测试笔试面试题精选
Mar 12 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
详解python算法常用技巧与内置库
Oct 17 Python
Django实现聊天机器人
May 31 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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教程 变量定义
2009/10/23 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php中使用sftp教程
2015/03/30 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python enumerate内置函数用法总结
2020/01/07 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
初三学习决心书
2014/03/11 职场文书
安全责任书范文
2014/03/12 职场文书