python备份工具

| 分类 python  | 标签 python 

《A Byte of Python》中第十一章讲解如何写一个简单的python备份工具。一共4个版本,然后又在最后提出了使用zipfile模块。趁着周末,看了一下zipfile的文档。下面是代码和一些笔记:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/python
#filename:zip_func.py

from __future__ import print_function
import os
import sys
import zipfile
import time

def zipit(src, des):
    filelist = []

    if os.path.isfile(src):
        filelist.append(src)
    else:
        for root, dirs, files in os.walk(src):
            for name in files:
                filelist.append(os.path.join(root, name))

    zf = zipfile.ZipFile(des, "w", zipfile.zlib.DEFLATED)
    for tar in filelist:
        arcname = tar[len(src) + 1:]
        zf.write(tar, arcname)

    zf.close()

def unzipit(src, des):
    if not os.path.exists(des):
        os.mkdir(des, 0777)

    zf = zipfile.ZipFile(src)
    for name in zf.namelist():
        name = name.replace('\\', '/')

    if name.endswith('/'):
        os.mkdir(os.path.join(des, name))
    else:
        ext_filename = os.path.join(des, name)
        ext_dir = os.path.dirname(ext_filename)
        if not os.path.exists(ext_dir):
            os.mkdir(ext_dir, 0777)

    outfile = open(ext_filename, "wb")
    outfile.write(zf.read(name))
    outfile.close()

if __name__ == '__main__':
    zipit(r'F:\src', r'F:\backup.zip')
    unzipit(r'F:\backup.zip', r'F:\des')

因为很多函数都没怎么用过,都是临时查的 API。所以备忘一下:

  • os.walk()返回一个三元组,分别为pwd,目录list,文件list
  • zipfile.ZipFile()三个参数,分别为zip放置目录,模式,压缩格式
  • zipfile.write()2个参数,第一个是要压缩的文件,第二个是压缩后的文件名(可自定义文件名)
  • zipfile.close()必须在使用zipfile对象后调用close()方法
  • os.path.*是路径方法的集合
  • open(),可以简单搜索一下python的文件操作就可以了
  • zipfile.read(),读取zip压缩包中的文件,文件列表可通过zipfile.namelist()获得
  • if name == ‘main‘的含义就是模块调用与被调用的区别

上一篇     下一篇