如何使用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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
python处理大数字的方法
May 27 Python
python变量不能以数字打头详解
Jul 06 Python
Python元组及文件核心对象类型详解
Feb 11 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
python+openCV对视频进行截取的实现
Nov 27 Python
Django中ORM的基本使用教程
Dec 22 Python
python数据抓取3种方法总结
Feb 07 Python
python人工智能human learn绘图可创建机器学习模型
Nov 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
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
python实现挑选出来100以内的质数
2015/03/24 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
德国旅游网站:weg.de
2018/06/03 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
自主实习接收函
2014/01/13 职场文书
决心书范文
2014/03/11 职场文书
安全目标管理责任书
2014/07/25 职场文书
大学军训决心书
2015/02/05 职场文书
立案决定书范文
2015/06/24 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server
Python机器学习之KNN近邻算法
2021/05/14 Python
利用Python实现模拟登录知乎
2022/05/25 Python
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers