zoukankan      html  css  js  c++  java
  • python小程序:备份文件

    设计程序,有以下步骤:

      需要备份的文件和目录由一个列表指定。

      备份应该保存在主备份目录中。

      文件备份成一个zip文件。

      zip存档的名称是当前的日期和时间。

    解决方案:

    版本一:

     1 #!/usr/bin/python
     2 #filename: backup_ver1.py
     3 
     4 import os
     5 import time
     6 
     7 source=['/home/swaroop/byte','/home/swaroop/bin']
     8 target_dir='/mnt/e/backup/'
     9 target=target_dir+time.strftime('%Y%m%d%H%M%S')+'.zip'
    10 zip_command="zip -qr '%s' %s"%(target,''.join(source))
    11 
    12 if os.system(zip_command)==0:
    13     print 'Successful backup to',target
    14 else:
    15     print 'Backup FAILED'
    16 
    17 
    18 #输出
    19 
    20 $ pyhon backup_ver1.py
    21 Successful backup to
    22 /mnt/e/backup/20041208073244.zip

    以上代码里,我们在source列表中指定需要备份的文件和目录,target_dir指定存储备份文件的目标目录,zip归档的名称是目前的日期和时间。time.strftime()函数需要我们在上面的程序中使用的那种定制。如,%Y被年份替代,%m被月份替代,其他依次是日时分秒。zip命令有一些参数,-q表示zip命令安静地工作。-r表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。选项后跟着zip归档的名称,然后再是待备份的文件和目录列表。我们使用字符串join方法把source列表转换为字符串。最后os.system运行命令,成功则返回0,失败则返回错误号。

    版本二:

    对前者的优化,采用更好的文件名机制--使用时间作为文件名,日期作为目录名,存放于主备份目录中。这样更易于管理。同时,文件名得以变短。

    代码:

     1 #!/usr/bin/python
     2 #filename: backup_ver2.py
     3 
     4 import os
     5 import time
     6 
     7 source=['/home/swaroop/byte','/home/swaroop/bin']
     8 target_dir='/mnt/e/backup/'
     9 today=target_dir+time.strftime('%Y%m%d)
    10 now=time.strftime('%H%M%S')
    11 if not os.path.exists(today):
    12     os.mkdir(today)
    13     print 'Successfully created directory',today
    14 target=today+os.sep+now+'.zip'
    15 zip_command="zip -qr '%s' %s"%(target,''.join(source))
    16 
    17 if os.system(zip_command)==0:
    18     print 'Successful backup to',target
    19 else:
    20     print 'Backup FAILED'
    21 
    22 
    23 #输出
    24 
    25 $ pyhon backup_ver2.py
    26 Successfully created directory
    27 /mnt/e/backup/20041208
    28 Successful backup to
    29 /mnt/e/backup/20041208/080020.zip
    30 
    31 $ pyhon backup_ver2.py
    32 Successful backup to
    33 /mnt/e/backup/20041208/080428.zip

    使用os.exists函数检验在主备份目录中是否有以当前日期作为名称的目录,若是没有,便使用os.mkdir函数创建。

    注意os.sep的用法--这会根据你的操作系统给出目录分隔符,即在linux、unix下它是'/',在windows下它是'\',而在mac os下它是':'。os.sep有利于移植平台。

    版本三:

    在zip归档的名称上加一些用户提供的注释,便于区分不同备份的作用。

    代码:

     1 #!/usr/bin/python
     2 #filename: backup_ver2.py
     3 
     4 import os
     5 import time
     6 
     7 source=['/home/swaroop/byte','/home/swaroop/bin']
     8 target_dir='/mnt/e/backup/'
     9 today=target_dir+time.strftime('%Y%m%d)
    10 now=time.strftime('%H%M%S')
    11 comment=raw_input('Enter a comment --> ')
    12 if len(comment)==0:
    13     target=today+os.sep+now+'.zip'
    14 else:
    15     target=today+os.sep+now+'_'+
    16         comment.replace(' ','_')+'.zip'
    17 if not os.path.exists(today):
    18     os.mkdir(today)
    19     print 'Successfully created directory',today
    20 zip_command="zip -qr '%s' %s"%(target,''.join(source))
    21 
    22 if os.system(zip_command)==0:
    23     print 'Successful backup to',target
    24 else:
    25     print 'Backup FAILED'
    26 
    27 
    28 #输出
    29 
    30 $ pyhon backup_ver3.py
    31 Enter a comment --> added new examples
    32 Successful backup to
    33 /mnt/e/backup/20041208/082156_added_new_examples.zip
    34 
    35 $ pyhon backup_ver3.py
    36 Enter a comment -->
    37 Successful backup to
    38 /mnt/e/backup/20041208/082316.zip

    进一步优化:

    改用tar命令

    tar='tar -cvzf %s %s -X /home/swaroop/excludes.txt'%(targe,''.join(srcdir))

    参数解释:

    -c表示创建一个归档
    -v表示交互,即命令更具交互性
    -z表示使用gzip滤波器
    -f表示强迫创建归档,即如果已经有一个同名文件,它会被替换
    -X表示含在指定文件名列表中的文件会被排除在备份之外。例如,你可以在文件中指定*~,从而不让备份包括所有以~结尾的文件。

    最理想的创建这些归档的方法是分别使用zipfile和tarfile。不推荐使用os.system。

  • 相关阅读:
    Flask学习笔记(10):钩子函数
    Flask学习笔记(8):csrf攻防
    Flask学习笔记(7):flask-migrate
    Flask学习笔记(6):flask-script
    Flask学习笔记(5):session
    Flask学习笔记(4):cookie
    Flask学习笔记(3):上传文件
    WTForm表单验证
    WINDOWS CMD命令小集
    Alembic环境配置与基本操作
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5233319.html
Copyright © 2011-2022 走看看