Python实现文件拷贝

2017年8月27日

1.实现目的

统一时间对服务器某文件夹内文件进行备份保存,如若备份成功则不提示任何错误,否则将以邮件的形式告知管理员,备份出错。

2.程序流程图

主要流程图

拷贝流程图

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,')
         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 2 [root@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实现文件备份的更多相关文章

  1. Python实例学习-文件备份

    1. 介绍 通过实例学习Python的使用,该实例来自文献[1]中的第11章解决问题. 由于没有搞清楚Win7下如何通过命令行调用zip命令,所以采用7z[2],采用7-zip命令行版本[3],版本号 ...

  2. Python/CMD 文件备份

    1.使用Python压缩文件并另存 import zipfile, os #备份文件ZIP格式: folder 目标文件夹 : Targetfolder:另存地址 def backuptozip(fo ...

  3. Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...

  4. python项目练习地址

    作者:Wayne Shi链接:http://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有,转载请联系作者获得授权. 目前是3 ...

  5. 从0开始的Python学习013编写一个Python脚本

    通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本. 问题 需求: 我想要一个可以给我备份重要文件的程序. 需求分析: 首先文件是有存储路径,文件的路径和 ...

  6. python项目推荐(转载知乎)

    作者:Wayne Shi链接:https://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  7. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  8. Python输入输出及其他

    print用法 print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果.回车 \r 本义是光标重 ...

  9. Python知乎上推荐的项目

    原文地址:https://www.zhihu.com/question/29372574/answer/88744491 作者:Wayne Shi链接:https://www.zhihu.com/qu ...

随机推荐

  1. MVC中Ajax post 和Ajax Get——提交对象

    HTTP 请求:GET vs. POST两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST.GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据GET 基本上 ...

  2. mysql中如何使用一句话将一个表的数据导入到另一个表中:insert into ...select

    INSERT INTO cdcd2015(`filename`,`xmlfile`,`updatetime`,`isDel`) SELECT `filename`,`xmlfile`,`updatet ...

  3. 10.24JS日记

    1.函数都有返回值,人为return,返回什么就是什么,否则,他的返回值就是undefined 而方法的本质也是函数,所以也有返回值 document.getElementById()返回的是获取的标 ...

  4. maven的父工程中添加子工程

    父工程的结构如下: 1.选中父工程名,接着单击鼠标右键,选择”Maven“ -----> "New Maven Module Project". 2.如下图,打勾 ---&g ...

  5. H5C3动画

    1 渐变 /* 渐变:不同颜色之间的柔和过渡 线性渐变:沿着某条直线发生渐变效果 注意:渐变准备来说是一张背景图 语法:linear-gradient */ background-image: lin ...

  6. Luogu2161 [SHOI2009]会场预约-线段树

    Solution 线段树维护 sum 表示区间内预约个数, L 表示区间最左边的预约, R 表示区间最右边的预约. $pushup$ 就是这样 : void up(int nd) { sum[nd] ...

  7. Codeforces 803C. Maximal GCD 二分

    C. Maximal GCD time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...

  8. python爬虫之urlError异常处理

    1.URLError URLError产生的原因: (1)网络无连接,即本机无法上网 (2)连接不到特定的服务器 (3)服务器不存在 import urllib.request import urll ...

  9. List<? extends T>和List<? super T>之间有什么区别?

    List<? extends T>表示类型的上界为T,即参数化的类型可能是T也可能是T的子类.<? extends T>被设计用来读数据的泛型,只能读取类型为T的元素. Lis ...

  10. vc项目中加载多个lib遇到的问题

    一个VC项目中 在网络加密 json解析等方面  加载了多个第三方库和文件 boost cryptpp rapidjson  mysql的连接池等等 在使用mysql++的时候 多次报错 LNK 20 ...