Python 标准库 -> Zipfile 模块 and Tarfile(tar包)

TAR ->

import tarfile

tar = tarfile.open("tar_file.tar","w")

tar.add(".danoo_player_wifi")

tar.close()

 

TAR GZIP ->

tar = tarfile.open("tar_file.tar.gzip","w|gz")

tar.add("/root/.danoo_player_wifi")

tar.close()

 

TAR BZIP2 ->

tar = tarfile.open("tar_file.tar.bzip2","w|bz2")

tar.add("/root/.danoo_player_wifi")

tar.close()

 

检查tar压缩包内容 ->

import tarfile

tar = tarfile.open("temp.tar","r")

tar.list()

tar.name

tar.getnames()

tar.members

tar.close()

 

解压TAR包 ->

tar = tarfile.open("temp.tar","r")

tar.extractall()

tar.close()

---------------------------------------------------------

zipfile 模块

( 2.0 新增) zipfile 模块可以用来读写 ZIP 格式.

---------------------------------------------------------

列出内容

使用 namelist 和 infolist 方法可以列出压缩档的内容, 前者返回由文件名组成的列表, 后者返回由 ZipInfo实例组成的列表.

---------------------------------------------------------

使用 zipfile 模块列出 ZIP 文档中的文件

---------------------------------------------------------

import zipfile

file = zipfile.ZipFile("samples/sample.zip", "r")     # 打开压缩包

# 列出压缩包内文件名
for name in file.namelist():         
    print name,

# 列出压缩包内文件信息
for info in file.infolist():
    print info.filename, info.date_time, info.file_size

sample.txt sample.jpg
sample.txt (1999, 9, 11, 20, 11, 8) 302
sample.jpg (1999, 9, 18, 16, 9, 44) 4762

---------------------------------------------------------

从 ZIP 文件中读取数据

调用 read 方法就可以从 ZIP 文档中读取数据. 它接受一个文件名作为参数, 返回字符串

---------------------------------------------------------

import zipfile

file = zipfile.ZipFile("samples/sample.zip", "r")   # 打开压缩包

for name in file.namelist():               #列出压缩包内文件名称
    data = file.read(name)                 # 读取文件到data
    print name, len(data), repr(data[:10])        # 输出文件对象数量及内容

sample.txt 302 'We will pe'
sample.jpg 4762 '\377\330\377\340\000\020JFIF'

--------------------------------------------------------- 

ZIP 文件写入数据

使用 zipfile 模块将文件储存在 ZIP 文件里

向压缩档加入文件很简单, 将文件名, 文件在 ZIP 档中的名称传递给 write 方法即可.

write 方法的第三个可选参数用于控制是否使用压缩.默认为 zipfile.ZIP_STORED , 意味着只是将数据储存在档案里而不进行任何压缩.

如果安装了 zlib 模块, 那么就可以使用 zipfile.ZIP_DEFLATED 进行压缩.

---------------------------------------------------------

import zipfile
import glob, os

file = zipfile.ZipFile("test.zip", "w")     # 打开压缩包,写方式

for name in glob.glob("samples/*"):        # 匹配samples目录下所有文件
    file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)      #将文件写入到压缩包内

file.close()

file = zipfile.ZipFile("test.zip", "r")
for info in file.infolist():
    print info.filename, info.date_time, info.file_size, info.compress_size

sample.wav (1999, 8, 15, 21, 26, 46) 13260 10985
sample.jpg (1999, 9, 18, 16, 9, 44) 4762 4626
sample.au (1999, 7, 18, 20, 57, 34) 1676 1103

...

---------------------------------------------------------

使用 zipfile 模块在 ZIP 文件中储存字符串

---------------------------------------------------------

import zipfile
import glob, os, time

file = zipfile.ZipFile("test.zip", "w")          # 打开压缩包,写方式

now = time.localtime(time.time())[:6]    # 获取当前时间 (2012, 2, 3, 16, 58, 39)

for name in ("life", "of", "brian"):
    info = zipfile.ZipInfo(name)
    info.date_time = now
    info.compress_type = zipfile.ZIP_DEFLATED
    file.writestr(info, name*1000)

file.close()

# open the file again, to see what's in it

file = zipfile.ZipFile("test.zip", "r")

for info in file.infolist():
    print info.filename, info.date_time, info.file_size, info.compress_size

life (2000, 12, 1, 0, 12, 1) 4000 26
of (2000, 12, 1, 0, 12, 1) 2000 18
brian (2000, 12, 1, 0, 12, 1) 5000 31

---------------------------------------------------------

                   案例分析

---------------------------------------------------------

import zipfile

z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件

for f in z.namelist():
    print f

---------------------------------------------------------

import zipfile

z = zipfile.ZipFile(filename, 'r')

for i in z.infolist():
    print i.file_size, i.header_offset

---------------------------------------------------------

import zipfile

z = zipfile.ZipFile(filename, 'r')

print z.read(z.namelist()[0])

---------------------------------------------------------

import zipfile, os

z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名字

#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件):
if os.path.isdir(testdir):
    for d in os.listdir(testdir):
        z.write(testdir+os.sep+d)
# close() 是必须调用的!

z.close()

---------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值