Python练手程序——文件备份工具
1 #Filename:backup_ver1.py 2 3 import os 4 import time 5 6 #1.The files and directories to be backed up are specified in a list 7 source = [r'D:\PythonSrc',r'D:\PythonSrc2'] 8 9 #2.The backup must be stored in a main backup directory 10 target_dir = r"D:\\PythonBak\\" 11 12 #3.The files are backed up into a zip file 13 #4.The name of the zip archive is the current date and time 14 target = target_dir + time.strftime('%y%m%d%H%M%S') + '.zip' 15 16 #5. We use the zip command (in Unix/Linux) to put the files in a zip archive 17 zip_command = "zip -qr %s %s" % (target,' '.join(source)) 18 19 #Run the backup 20 if os.system(zip_command) == 0: 21 print 'Successful backup to',target 22 else: 23 print 'Backup FAILED'
注意:
windows下的target目录要写两个\\
linux下的目录是“/”而windows下的目录是“\”
1 #Filename:backup_ver2.py 2 3 import os 4 import time 5 6 #1.The files and directories to be backed up are specified in a list 7 source = [r'D:\PythonSrc',r'D:\PythonSrc2'] 8 9 #2.The backup must be stored in a main backup directory 10 target_dir = r"D:\\PythonBak\\" 11 12 #3.The files are backed up into a zip file 13 #4.The name of the zip archive is the current date and time 14 today = target_dir + time.strftime('%y%m%d') 15 now = time.strftime('%H%M%S') 16 17 if not os.path.exists(today): 18 os.mkdir(today) 19 print 'Successfully created directory',today 20 21 target = today + os.sep + now + '.zip' 22 23 #5. We use the zip command (in Unix/Linux) to put the files in a zip archive 24 zip_command = "zip -qr %s %s" % (target,' '.join(source)) 25 26 #Run the backup 27 if os.system(zip_command) == 0: 28 print 'Successful backup to',target 29 else: 30 print 'Backup FAILED'
这个版本在存储目录上进行了一定的优化。
改变的部分主要是使用os.exists
函数检验在主备份目录中是否有以当前日期作为名称的目录。如果没有,我们使用os.mkdir
函数创建。
注意os.sep
变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是'/'
,在Windows下它是'\\'
,而在Mac OS下它是':'
。使用os.sep
而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。
1 #Filename:backup_ver3.py 2 3 import os 4 import time 5 6 #1.The files and directories to be backed up are specified in a list 7 source = [r'D:\PythonSrc',r'D:\PythonSrc2'] 8 9 #2.The backup must be stored in a main backup directory 10 target_dir = r"D:\\PythonBak\\" 11 12 #3.The files are backed up into a zip file 13 #4.The name of the zip archive is the current date and time 14 today = target_dir + time.strftime('%y%m%d') 15 now = time.strftime('%H%M%S') 16 17 #Take a comment from the user to create the name of the zip file 18 comment = raw_input('Enter a comment-->') 19 if len(comment)==0: 20 target = today + os.sep + now + '.zip' 21 else: 22 target = today + os.sep + now + '_' + comment.replace(' ','_') + '.zip' 23 24 #Create the subdirectory if it isn't already there 25 if not os.path.exists(today): 26 os.mkdir(today) 27 print 'Successfully created directory',today 28 29 #5. We use the zip command (in Unix/Linux) to put the files in a zip archive 30 zip_command = "zip -qr %s %s" % (target,' '.join(source)) 31 32 #Run the backup 33 if os.system(zip_command) == 0: 34 print 'Successful backup to',target 35 else: 36 print 'Backup FAILED'
这个版本里边,可以在存储文件名中添加一些注释信息。
进一步优化
对于大多数用户来说,第四个版本是一个满意的工作脚本了,但是它仍然有进一步改进的空间。比如,你可以在程序中包含 交互 程度——你可以用-v
选项来使你的程序更具交互性。
另一个可能的改进是使文件和目录能够通过命令行直接传递给脚本。我们可以通过sys.argv
列表来获取它们,然后我们可以使用list
类提供的extend
方法把它们加到source
列表中去。
我还希望有的一个优化是使用tar命令替代zip命令。这样做的一个优势是在你结合使用tar和gzip命令的时候,备份会更快更小。如果你想要在Windows中使用这些归档,WinZip也能方便地处理这些.tar.gz
文件。tar命令在大多数Linux/Unix系统中都是默认可用的。Windows用户也可以下载安装它。
命令字符串现在将称为:
tar =
'tar -cvzf %s %s -X /home/swaroop/excludes.txt'
% (target,
' '
.join(srcdir))
选项解释如下:
-
-c
表示创建一个归档。 -
-v
表示交互,即命令更具交互性。 -
-z
表示使用gzip滤波器。 -
-f
表示强迫创建归档,即如果已经有一个同名文件,它会被替换。 -
-X
表示含在指定文件名列表中的文件会被排除在备份之外。例如,你可以在文件中指定*~
,从而不让备份包括所有以~
结尾的文件。
重要
最理想的创建这些归档的方法是分别使用zipfile
和tarfile
。它们是Python标准库的一部分,可以供你使用。使用这些库就避免了使用os.system
这个不推荐使用的函数,它容易引发严重的错误。
然而,我在本节中使用os.system
的方法来创建备份,这纯粹是为了教学的需要。这样的话,例子就可以简单到让每个人都能够理解,同时也已经足够用了。
软件开发过程
现在,我们已经走过了编写一个软件的各个环节。这些环节可以概括如下:
- 什么(分析)
- 如何(设计)
- 编写(实施)
- 测试(测试与调试)
- 使用(实施或开发)
- 维护(优化)
重要
我们创建这个备份脚本的过程是编写程序的推荐方法——进行分析与设计。开始时实施一个简单的版本。对它进行测试与调试。使用它以确信它如预期那样地工作。再增加任何你想要的特性,根据需要一次次重复这个编写-测试-使用的周期。记住“软件是长出来的,而不是建造的”。
找我内推: 字节跳动各种岗位
作者:
ZH奶酪(张贺)
邮箱:
cheesezh@qq.com
出处:
http://www.cnblogs.com/CheeseZH/
*
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。