使用Python编写的文件备份程序
2017-03-17 08:40
344 查看
更多技术文章请访问我的个人博客http://www.rain1024.com
更多技术文章请访问我的个人博客http://www.rain1024.com
作为程序员平时需要备份许多东西,生怕有些文件改了就找不回来了,尤其是U盘里的经常会被修改,而我又不能一个文件一个文件的对比着去备份,全复制又太浪费时间,网上关于备份的程序很多,但有很多限制,没有我想要的功能,而且有的还会收费,所以决定自己来造个轮子。
平时用PHP比较多,我也有想过用PHP写一个类似的文件游览器,但这个轮子就造的有些大了,我只是想自动备份U盘里的东西,能够自动对比匹配目标文件就可以,不需要太臃肿,而Python简单,快速,连界面都不用写,每次直接运行就行。所以我决定使用Python来编写,原理就是对备份目录进行递归,把找到的文件和本地的文件进行对比,对比时使用文件生成md5码来匹配,如果本地不存在,则创建目录,再复制文件。如果没有Python环境,可以直接下载我编译好的.exe程序直接使用,输入时要注意,由于没有写图形界面,文件夹的地址需要输入,一定要保证文件地址的正确,如果是主盘符如d盘,直接写’d:’,\n如果是文件夹,例如d盘下的test文件夹,则输入d:/test。下面是源代码,注释写的非常详细,需要的可以按照自己的需求更改。
#-*- coding=utf8 -*- #使用函数对指定目录进行深层次遍历,先列出来所有的文件和目录 #再去指定的目录里再次查找文件和目录,一直深入下去 # 如果是文件,就不再深入下去,而去判断路径是否存在于电脑中, # 不存在则将其复制 import hashlib import os import shutil #用于判断两个文件是否相同,提取每个文件中的前4字节的内容然后输出md5码进行比较 def md5check(fname): m = hashlib.md5() with open(fname) as fobj: while True: data = fobj.read(4096) if not data: break m.update(data) return m.hexdigest() #文件复制的函数 def copy(path): new_path = path new_path = new_path.replace(old_scoure, new_scoure) #将原盘符替换为我所要存放的目标盘符 print path + "---copy---" + new_path if os.path.isfile(new_path): #如果目标文件存在 old_md = md5check(path) #提取源文件的md5 new_md = md5check(new_path) #提取目标文件的md5 if old_md != new_md: #如果不相等,说明源文件有修改 shutil.copy(path, new_path) #因为已经判断了目标文件的存在,所以不需要创建目录,直接复制就可以 else: #如果目标文件不存在 dirname = os.path.dirname(new_path) # 提取目标的目录 if os.path.exists(dirname): #目录存在 shutil.copy(path, new_path) #直接复制文件 else: #目录不存在 try: os.makedirs(dirname) #使用多级目录创建函数创建目录 shutil.copy(path, new_path) #直接复制文件 except WindowsError: #错误反馈,而不会停止操作 print "创建目录出错" # 查找所有目录文件的递归函数 def lsdir(forder): path = os.listdir(forder) #分离出来的文件列表 # print forder # print path for line in path: #逐个判断 line = forder + "/" + line #没有使用join函数,因为会出现 \ if (os.path.isdir(line)): #是目录就继续进行递归 lsdir(line) else: # path = os.path.join(forder,line) # print 'l:'+line copy(line) #将文件的地址传到copy函数中去复制 # break def test(): print new_scoure if __name__=='__main__': # lsdir('e:/test') global old_scoure global new_scoure #设置为全局变量 concent = "请保证地址的正确性,如果是主盘符如d盘,直接写'd:',\n如果是文件夹,例如d盘下的test文件夹,则输入d:/test" c_unicode = concent.decode("utf-8") #为了在cmd显示中文,需要进行转码 # c_gbk = c_unicode.encode("gbk") print c_unicode concent = "输入要备份的文件地址:" c_unicode = concent.decode("utf-8") print c_unicode old_scoure = raw_input() concent = "输入备份文件要存放的地址,请保证地址存在:" c_unicode = concent.decode("utf-8") print c_unicode new_scoure = raw_input() # path = 'e:/Markdown' lsdir(old_scoure) concent = "输入任意键关闭" c_unicode = concent.decode("utf-8") print c_unicode raw_input()
下载地址http://blog-1252406596.costj.myqcloud.com/blog/test.exe
下面是运行的效果图片
更多技术文章请访问我的个人博客http://www.rain1024.com
相关文章推荐
- Windows系统下使用C语言编写单线程的文件备份程序
- 在windows环境下用python编写备份文件小程序
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 使用Python 和Boto 库将文件备份到AmazonS3
- windows下使用批处理文件调用python程序
- [Python]用Python编写程序修复"恶邮差"变种U病毒感染文件。
- 使用VC++6.0重新编写数据库备份程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 5、 java 编写程序拷贝一个文件, 尽量使用效率高的方式.
- Pyjamas:使用Python编写AJAX程序
- 使用 cx_freeze 把python程序编译成可执行文件
- 使用Python在Windows下调用Winrar备份文件
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)
- 习题13:编写程序,使用File类实现删除当前目录下的所有文件。
- python程序:备份MS SQL数据库到压缩文件
- python程序使用pyinstaller打包成单一.exe文件后,如何的到.exe文件所在目录?
- 一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)