编写一个Python脚本——Windows下Python压缩文件


背景:最近学习Python,看到《简明Python教程》,第10章编写一个Python脚本

问题:为所有重要文件备份。

分析:1需要备份的文件和目录由一个列表指定;2、备份应该保存在主备份目录中;3、文件备份成一个zip文件;4、zip存档的名称为当前的日期和时间;5、使用标准的zip命令

代码:

# Filename: backup_ver1.py

import os
import zipfile
import time

source = (r'F:\pythonCode\lesson2')
target_path = 'F:\\pythonCode\\lesson\\'

today  = target_path + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')
# print now

if not os.path.exists(today):
    os.mkdir(today)
    print 'Sucessfully created directory',today
    
zipName = today + os.sep + now + '.zip'
# print zipName

f = zipfile.ZipFile( zipName, 'w', zipfile.ZIP_DEFLATED )
for dirpath, dirnames, filenames in os.walk(source):
    for filename in filenames:
        print filename
        f.write(os.path.join( source, filename))
        # print 1
f.close
代码分析:

本程序中需要引用os、zipfile、time模块,其中zipfile用来创建和读取zip文件,time用来获取当前的时间。

1、zipfile使用用例

z = zipfile.ZipFile(filename, 'r',ZIP_DEFLATED)#这里第二个参数用r表示读取zip文件,w表示创建一个zip文件
for f in z.namelist():
    print f
解:此代码用于读取一个zip压缩包里所有文件的名字,filename为文件路径

2、os.walk解读

os.walk(top, topdown = True, onerror = None, followlinks = False)
其中

top:所要遍历的目录地址;

topdown:为真,优先遍历top目录;为假,优先遍历子目录;

os.walk()返回值是一个生成器(generator),返回一个三元组(root,dirs,files),每次循环都更新;
其中

root:指当前遍历的这个文件夹的本身地址;

dirs:是一个list,内容为该文件夹下的所有目录(子目录),也是文件夹;

files:一个list,内容是该文件夹下的所有文件。

下面借用一个例子说明,转自http://www.jianshu.com/p/bbad16822eab

文件结构如下:

a ->   b   ->   1.txt,  2.txt
             c   ->   3.txt
             d   ->   
           4.txt
           5.txt
for (root, dirs, files) in os.walk('a'):
    #第一次运行时,当前遍历目录为 a
    所以 root == 'a'
         dirs == [ 'b', 'c', 'd']
         files == [ '4.txt', '5.txt']

    。。。

    # 接着遍历 dirs 中的每一个目录
    b:  root  = 'a\\b'
        dirs  = []
        files = [ '1.txt', '2.txt']

    # dirs为空,返回
    # 遍历c
    c:  root  = 'a\\c'
        dirs  = []
        files = [ '3.txt' ]

    PS : 如果想获取文件的全路径,只需要 
    for f in files:
        path = os.path.join(root,f)

    # 遍历d
    d:  root  = 'a\\b'
        dirs  = []
        files = []

    遍历完毕,退出循环
至此可以解读上面Python程序




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值