Python实现文件备份
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实现文件备份的更多相关文章
- Python实例学习-文件备份
1. 介绍 通过实例学习Python的使用,该实例来自文献[1]中的第11章解决问题. 由于没有搞清楚Win7下如何通过命令行调用zip命令,所以采用7z[2],采用7-zip命令行版本[3],版本号 ...
- Python/CMD 文件备份
1.使用Python压缩文件并另存 import zipfile, os #备份文件ZIP格式: folder 目标文件夹 : Targetfolder:另存地址 def backuptozip(fo ...
- Python检查 文件备份是否正常 云备份进程是否正常运行
场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...
- python项目练习地址
作者:Wayne Shi链接:http://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有,转载请联系作者获得授权. 目前是3 ...
- 从0开始的Python学习013编写一个Python脚本
通过之前的学习我们已经了解了Python的很多基础运用了,现在我们尝试着做一个有使用价值的小脚本. 问题 需求: 我想要一个可以给我备份重要文件的程序. 需求分析: 首先文件是有存储路径,文件的路径和 ...
- python项目推荐(转载知乎)
作者:Wayne Shi链接:https://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- Python代码样例列表
扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│ Python用户推荐系统曼哈顿算法实现.py│ ...
- Python输入输出及其他
print用法 print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果.回车 \r 本义是光标重 ...
- Python知乎上推荐的项目
原文地址:https://www.zhihu.com/question/29372574/answer/88744491 作者:Wayne Shi链接:https://www.zhihu.com/qu ...
随机推荐
- JS打开新窗口,子窗口操作父窗口
<!--父窗口弹窗代码开始--> <script type="text/javascript"> function OpenWindow() { windo ...
- Linux驱动之LED驱动编写
从上到下,一个软件系统可以分为:应用程序.操作系统(内核).驱动程序.结构图如下:我们需要做的就是写出open.read.write等驱动层的函数.一个LED驱动的步骤如下: 1.查看原理图,确定需要 ...
- ubuntu上mongodb的安装
Ubuntu上安装MongoDB的完全步骤以及注意事项 本文我们详细介绍了Ubuntu上安装MongoDB的全部过程,希望本次的介绍能够对您有所帮助. AD: 2013大数据全球技术峰会课程PPT下载 ...
- DOM系列基础知识
DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) .DOM 描绘了一个层次化的节点树,运行开发人员添加.移除和修改 ...
- JavaScript获取DOM对象的几种方式
1.getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用 2.getElementsByName() 方法可返回带有指定名称的对象的集合 3.getElementsByTa ...
- PAT 1004 成绩排名 (20)(代码)
1004 成绩排名 (20)(20 分) 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为\ 第1行:正整数n 第2行:第1 ...
- POJ2349 Arctic Network
原题链接 先随便找一棵最小生成树,然后贪心的从大到小选择边,使其没有贡献. 显然固定生成树最长边的一个端点安装卫星频道后,从大到小选择边的一个端点作为卫星频道即可将该边的贡献去除. 所以最后的答案就是 ...
- 多维数组sorted函数的用法
对某一个位置排列 l=[[1,5,7,9],[5,10,6,11],[4,2,1,4]] newlist=sorted(l,key=lambda iterm : iterm[0],reverse=Tr ...
- 设计师们做UI设计和交互设计、界面设计等一般会去什么网站呢?
明明可靠颜值吃饭,却偏偏要靠才华立身,UI设计师就是这样一群神奇的物种.面对“大的同时小一点”.“五彩斑斓黑”.“下班之前给我”……这些甲方大大刁钻的需求,设计师每天都在咬牙微笑讨生活.你可以批评我的 ...
- 客户端服务端web问题
情况是这样: 我这边是C++socket/TCP服务器,然后有几万台客户端长连接我的服务器,这时,web端想对客户端进行参数设置,于是web端连到我的TCP服务器发来它想设置的客户端的ID和设置参数, ...