zoukankan      html  css  js  c++  java
  • Python编写一个Python脚本

    我想要一个可以为我的所有重要文件创建备份的程序。(下面测试环境为python2.7)

    1.backup_ver1.py

    #!/usr/bin/python
    import os
    import time
    # 1. The files and directories to be backed up are specified in a list.
    source = ['/home/esun']
    # If you are using Windows, use source = [r'C:Documents', r'D:Work'] or something like that
    # 2. The backup must be stored in a main backup directory
    target_dir = '/mnt/e/backup/' # Remember to change this to what you will be using
    # 3. The files are backed up into a zip file.
    # 4. The name of the zip archive is the current date and time
    target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'
    # 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
    zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
    # Run the backup
    if os.system(zip_command) == 0:
            print 'Successful backup to', target
    else:
            print 'Backup FAILED'
    

    运行结果

    [root@host python]# ./backup_ver1.py
    Successful backup to /mnt/e/backup/20160107150139.zip
     

    zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。两个选项可以组合成缩写形式-qr。选项后面跟着待创建的zip归档的名称,然后再是待备份的文件和目录列表。我们使用已经学习过的字符串join方法把source列表转换为字符串。最后,我们使用os.system函数 运行 命令,利用这个函数就好像在 系统 中运行命令一样。即在shell中运行命令——如果命令成功运行,它返回0,否则它返回错误号。

    2.backup_ver2.py

    #!/usr/bin/python
    # Filename: backup_ver2.py
    import os
    import time
    # 1. The files and directories to be backed up are specified in a list.
    source = ['/home/esun']
    # If you are using Windows, use source = [r'C:Documents', r'D:Work'] or something like that
    # 2. The backup must be stored in a main backup directory
    target_dir = '/mnt/e/backup/' # Remember to change this to what you will be using
    # 3. The files are backed up into a zip file.
    # 4. The current day is the name of the subdirectory in the main directory
    today = target_dir + time.strftime('%Y%m%d')
    # The current time is the name of the zip archive
    now = time.strftime('%H%M%S')
    # Create the subdirectory if it isn't already there
    if not os.path.exists(today):
            os.mkdir(today) # make directory
            print 'Successfully created directory', today
    # The name of the zip file
    target = today + os.sep + now + '.zip'
    # 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
    zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
    # Run the backup
    if os.system(zip_command) == 0:
            print 'Successful backup to', target
    else:
            print 'Backup FAILED'
    

    运行结果

    [root@host python]# ./backup_ver2.py
    Successfully created directory /mnt/e/backup/20160107
    Successful backup to /mnt/e/backup/20160107/105442.zip
     

    两个程序的大部分是相同的。改变的部分主要是使用os.exists函数检验在主备份目录中是否有.以当前日期作为名称的目录。如果没有,我们使用os.mkdir函数创建。注意os.sep变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是'/',在Windows下它是'\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。

    3. backup_ver4.py

    #!/usr/bin/python
    # Filename: backup_ver4.py
    import os
    import time
    # 1. The files and directories to be backed up are specified in a list.
    source = ['/home/esun', '/etc']
    # If you are using Windows, use source = [r'C:Documents', r'D:Work'] or something like that
    # 2. The backup must be stored in a main backup directory
    target_dir = '/mnt/e/backup/' # Remember to change this to what you will be using
    # 3. The files are backed up into a zip file.
    # 4. The current day is the name of the subdirectory in the main directory
    today = target_dir + time.strftime('%Y%m%d')
    # The current time is the name of the zip archive
    now = time.strftime('%H%M%S')
    # Take a comment from the user to create the name of the zip file
    comment = raw_input('Enter a comment --> ')
    if len(comment) == 0: # check if a comment was entered
            target = today + os.sep + now + '.zip'
    else:
            target = today + os.sep + now + '_' + 
    comment.replace(' ', '_') + '.zip'
    # Notice the backslash!
    # Create the subdirectory if it isn't already there
    if not os.path.exists(today):
            os.mkdir(today) # make directory
            print 'Successfully created directory', today
    # 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
    zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
    # Run the backup
    if os.system(zip_command) == 0:
            print 'Successful backup to', target
    else:
            print 'Backup FAILED'
    

    运行结果

    [root@host python]# ./backup_ver4.py
    Enter a comment --> test1                                                                                              Successful backup to /mnt/e/backup/20160107/111406_test1.zip
     

    我们使用raw_input函数得到用户的注释,然后通过len函数找出输入的长度以检验用户是否确实输入了什么东西。如果用户只是按了回车(比如这只是一个惯例备份,没有做什么特别的修改),那么我们就如之前那样继续操作。 

    4.总结:对于大多数用户来说,第四个版本是一个满意的工作脚本了,但是它仍然有进一步改进的空间。比如,你可以在程序中包含 交互 程度——你可以用-v选项来使你的程序更具交互性。我还希望有的一个优化是使用tar命令替代zip命令。如:tar = 'tar -cvzf %s %s -X /home/swaroop/excludes.txt' % (target, ' '.join(srcdir))。最理想的创建这些归档的方法是分别使用zipfile和tarfile。它们是Python标准库的一部分,可以供你使用。使用这些库就避免了使用os.system这个不推荐使用的函数,它容易引发严重的错误。

  • 相关阅读:
    Maven
    Dubbo系列之 (一)SPI扩展
    AQS之Condition
    Dubbo系列之 (七)网络层那些事(2)
    Dubbo系列之 (七)网络层那些事(1)
    Dubbo系列之 (六)服务订阅(3)
    Dubbo系列之 (五)服务订阅(2)
    Dubbo系列之 (四)服务订阅(1)
    Dubbo系列之 (三)Registry注册中心-注册(2)
    Dubbo系列之 (二)Registry注册中心-注册(1)
  • 原文地址:https://www.cnblogs.com/oskb/p/5109197.html
Copyright © 2011-2022 走看看