# coding:utf-8
import gzip
import tarfile
import os
import zipfile
# g = gzip.GzipFile(filename="", mode="wb", compresslevel=9,
# fileobj=open('E:\\test\\sitemap.log.gz', 'wb'))
# g.write(open('E:\\list4.txt').read())
# g.close()
g = gzip.GzipFile(mode="rb", fileobj=open('e:\\test\\sitemap.log.gz', 'rb'))
open(r"E:\\test\\haha1.txt", "wb").write(g.read())
A1 gz 压缩1
def n_gz(f_name):
g_file = gzip.GzipFile(filename="", mode="wb", compresslevel=9,
fileobj = open(f_name + '.gz', 'wb'))
g_file.write(open(f_name).read())
g_file.close()
c = "E:\\test\\wage.txt"
n_gz(c)
A2 gz 压缩2
def sn_gz(file_name):
with open(file_name, 'rb') as plain_file:
with gzip.open(file_name +'.gz', 'wb') as zip_file:
zip_file.writelines(plain_file)
b = "E:\\test\\haha.txt"
sn_gz(b)
A3 gz 解压
def un_gz(file_name):
f_name = file_name.replace(".gz", "")
# 获取文件的名称,去掉
g_file = gzip.GzipFile(file_name)
# 创建gzip对象
open(f_name, "w+").write(g_file.read())
# gzip对象用read()打开后,写入open()建立的文件中。
g_file.close()
# 关闭gzip对象
a = 'e:\\test\\sitemap.log.gz'
un_gz(a)
B1 压缩.taz
#一次性打包整个根目录。空子目录会被打包。
#如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_tgz(output_filename, source_dir):
with tarfile.open(output_filename, "w:gz") as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
a = "test.tar.gz"
b = 'e:\\test'
make_tgz(a, b)
#逐个添加文件打包,未打包空子目录。可过滤文件。
#如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_targz_one_by_one(output_filename, source_dir):
tar = tarfile.open(output_filename, "w:gz")
for root,dir,files in os.walk(source_dir):
for file in files:
pathfile = os.path.join(root, file)
tar.add(pathfile)
tar.close()
B2 解压 taz
def un_tar(file_name):
tar = tarfile.open(file_name)
names = tar.getnames()
if os.path.isdir(file_name + "_files"):
pass
else:
os.mkdir(file_name + "_files")
#由于解压后是许多文件,预先建立同名文件夹
for name in names:
tar.extract(name, file_name + "_files/")
tar.close()
a = 'e:\\bbc\\test.tar.gz'
un_tar(a)
#打包目录为zip文件(未压缩)
# def make_zip(source_dir, output_filename):
# zipf = zipfile.ZipFile(output_filename, 'w')
# pre_len = len(os.path.dirname(source_dir))
# for parent, dirnames, filenames in os.walk(source_dir):
# for filename in filenames:
# pathfile = os.path.join(parent, filename)
# arcname = pathfile[pre_len:].strip(os.path.sep) #相对路径
# zipf.write(pathfile, arcname)
# zipf.close()
#解压zip文件
# def un_zip(file_name):
# """unzip zip file"""
# zip_file = zipfile.ZipFile(file_name)
# if os.path.isdir(file_name + "_files"):
# pass
# else:
# os.mkdir(file_name + "_files")
# for names in zip_file.namelist():
# zip_file.extract(names,file_name + "_files/")
# zip_file.close()