如何使用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 10 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
浅析Python中的for 循环
Jun 09 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
python爬虫要用到的库总结
Jul 28 Python
Python如何将模块打包并发布
Aug 30 Python
详解python tkinter 图片插入问题
Sep 03 Python
python飞机大战游戏实例讲解
Dec 04 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校验ISBN码的函数代码
2011/01/17 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
求职自荐信范文格式
2013/11/29 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
法院个人总结
2015/03/03 职场文书
首都博物馆观后感
2015/06/05 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android