作者 | 刘早起
来源 | 早起Python(ID:zaoqi-python)
.gz: 即 gzip,通常只能压缩一个文件
.tar: 本质上不是压缩工具而是打包工具,可以跟 .gz 配合形成 .tar.gz 的打包压缩格式 .zip: 和 .tar.gz 很类似但可以打包压缩多个文件
.rar: 打包压缩文件,最初用于 DOS
import globimport ospath = r'C:\xxxx\download'file_lst = glob.glob(path + '/*')# 列表推导式filename_lst = [os.path.basename(i) for i in file_lst]print(filename_lst)
接下来根据文件的后缀名判断是否需要压缩,先看一下代码框架
for i in filename_lst:if '.' in i:# 获取后缀名suffix = i.split('.')[-1]# 逐个将后缀名和各格式的压缩后缀匹配if suffix == 'gz':passif ...: # 再次判断新产生的文件名是否以 .tar 结尾passif suffix == 'tar':passif suffix == 'zip':passif suffix == 'rar':pass
这里有2个注意点:
import gzipdef ungz(filename):filename = filename[:-3] # gz文件的单文件解压就是去掉 filename 后面的 .gzgz_file = gzip.GzipFile(filename)with open(filename, "w+") as file:file.write(gz_file.read())return filename # 这个gzip的函数需要返回值以进一步配合untar函数
2、处理.tar文件
import tarfiledef untar(filename):tar = tarfile.open(filename)names = tar.getnames()# tar本身是将文件打包,解除打包会产生很多文件,因此需要建立文件夹存放if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")for name in names:tar.extract(name, filename + "_dir/")tar.close()
import zipfiledef unzip(filename):zip_file = zipfile.ZipFile(filename)# 类似tar解除打包,建立文件夹存放解压的多个文件if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")for names in zip_file.namelist():zip_file.extract(names, filename + "_dir/")zip_file.close()
import rarfiledef unrar(filename):rar = rarfile.RarFile(filename)if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")os.chdir(filename + "_dir")rar.extractall()rar.close()
for filename in filename_lst:if '.' in filename:suffix = filename.split('.')[-1]if suffix == 'gz':new_filename = ungz(filename)os.remove(filename)if new_filename.split('.')[-1] == 'tar':untar(new_filename)os.remove(new_filename)if suffix == 'tar':untar(filename)os.remove(filename)if suffix == 'zip':unzip(filename)os.remove(filename)if suffix == 'rar':unrar(filename)os.remove(filename)
import timewhile True:func()time.sleep(5) # 睡眠秒数可以设置大一点避免过度占用资源
import globimport osimport gzipimport tarfileimport zipfileimport rarfileimport timepath = r'C:\xxxx\download'file_lst = glob.glob(path + '/*')filename_lst = [os.path.basename(i) for i in file_lst]def ungz(filename):filename = filename[:-3]gz_file = gzip.GzipFile(filename)with open(filename, "w+") as file:file.write(gz_file.read())return filenamedef untar(filename):tar = tarfile.open(filename)names = tar.getnames()if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")for name in names:tar.extract(name, filename + "_dir/")tar.close()def unzip(filename):zip_file = zipfile.ZipFile(filename)if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")for names in zip_file.namelist():zip_file.extract(names, filename + "_dir/")zip_file.close()def unrar(filename):rar = rarfile.RarFile(filename)if not os.path.isdir(filename + "_dir"):os.mkdir(filename + "_dir")os.chdir(filename + "_dir")rar.extractall()rar.close()def unzip_files():for filename in filename_lst:if '.' in filename:suffix = filename.split('.')[-1]if suffix == 'gz':new_filename = ungz(filename)os.remove(filename)if new_filename.split('.')[-1] == 'tar':untar(new_filename)os.remove(new_filename)if suffix == 'tar':untar(filename)os.remove(filename)if suffix == 'zip':unzip(filename)os.remove(filename)if suffix == 'rar':unrar(filename)os.remove(filename)while True:unzip_files()time.sleep(5)
更多精彩推荐
☞疾速激爽,电竞玩家的心仪之选:AMD 锐龙 5000 系列登场!☞九问国产操作系统,九大掌门人万字回应
点分享
点点赞
点在看