如何使用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简单获取数组元素个数的方法
Jul 13 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
python 性能优化方法小结
Mar 31 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
详解Python3 pickle模块用法
Sep 16 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
python 实现超级玛丽游戏
Nov 25 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
Python标准库之typing的用法(类型标注)
Jun 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
python实现杨辉三角思路
2017/07/14 Python
浅谈Python中的私有变量
2018/02/28 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
出国导师推荐信
2015/03/25 职场文书
优秀大学生申请书
2019/06/24 职场文书
MySQL去除密码登录告警的方法
2022/04/20 MySQL
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers