在学习word2vec代码的过程中,遇到了对压缩text8.zip文件进行读取操作,所以进行网上查找资料,用法总结如下:
Zipfile模块
1、读取压缩文件
zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。
比如要读取一个Python zipfile 模块,这里假设filename是一个文件的路径:
import zipfile
filename = "text8.zip"
z = zipfile.ZipFile(filename, 'r')
for i in z.infolist():
print(i.file_size, i.header_offset)
运行结果:
这里使用了z.infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZipInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。
z.namelist()就是读取ZipInfo中的filename,组成一个 list返回的。
import zipfile
import tensorflow as tf
filename = "text8.zip"
z = zipfile.ZipFile(filename, 'r')
#for i in z.infolist():
# print(i.file_size, i.header_offset)
print(z.namelist()[0]) #这样就取出z.namelist()中的第一个文件名,并且输出到屏幕
data = z.read(z.namelist()[0]) #读取第一个文件的内容
print(data[0:100]) #输出前100个
2、压缩
f=zipfile.ZipFile(
file,
mode="r",
compression=ZIP_STORED,
allowZip64=False
)
创建一个zip文件对象,压缩是需要把mode改为‘w’,这个是源码中的注释Open the ZIP file with mode read “r”, write “w” or append “a”,a为追加压缩,不会清空原来的zip
f.write(filename)
将文件filename写入zip文件中,即将文件压缩
f.close()
将zip文件对象关闭,与open一样可以使用上下文with as
import zipfile
with zipfile.ZipFile('test.zip', mode='w') as zipf:
zipf.write('tsne.png')
# 查看压缩文件test.zip中的文件
zipf = zipfile.ZipFile('test.zip')
print(zipf.namelist())
3、解压文件
f.extract(directory)和f.exractall(directory)
import zipfile
zipf = zipfile.ZipFile('test.zip')
zipf.extractall('channel1')#将所有文件解压到channel1目录下
4、高级应用
- zipfile.is_zipfile(filename)
判断一个文件是不是压缩文件 - ZipFile.open(name[, mode[, password]])
打开压缩文档中的某个文件
参考资料
博客: https://www.cnblogs.com/alummox/p/7414279.html
博客: https://www.cnblogs.com/bergus/p/4811293.html