怎么让Python在后台自动解压各种压缩文件

发布时间:2021-07-24 09:13:30 作者:chen
来源:亿速云 阅读:112

本篇内容主要讲解“怎么让Python在后台自动解压各种压缩文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么让Python在后台自动解压各种压缩文件”吧!

一、需求描述

编写一个Python程序,每次下载压缩包形式的文件后,自动将内部文件解压到当前文件夹后将压缩包删除,通过本案例可以学到的知识点:

二、步骤分析和前置知识

码代码之前需要将复杂问题解释成多个明确的要求,即这个程序实现的逻辑为:

提到压缩文件就要分不同压缩格式进行讨论,主要有以下4种:

因此,文件是否为压缩文件的判断逻辑可以如下:

不同压缩文件的解压代码各不相同,在后续代码操作中具体展开。

三、代码实现

首先是获取 download 文件夹下所有文件的文件名

import glob import os  path = 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':             pass             if ...: # 再次判断新产生的文件名是否以 .tar 结尾                 pass         if suffix == 'tar':             pass         if suffix == 'zip':             pass         if suffix == 'rar':             pass

这里有2个注意点:

1. 处理.gz 文件

import gzip  def ungz(filename):     filenamefilename = filename[:-3] # gz文件的单文件解压就是去掉 filename 后面的 .gz     gz_file = gzip.GzipFile(filename)     with open(filename, "w+") as file:         file.write(gz_file.read())         return filename  # 这个gzip的函数需要返回值以进一步配合untar函数

前面反复提及的gz文件有可能跟tar文件配合,因此解压gz文件后需要再判断是否有必要解开tar文件

这里就可以先把tar文件的函数写出来?

2. 处理.tar文件

import tarfile  def 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()

3. 处理.zip文件

import zipfile  def 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()

4. 处理.rar文件

import rarfile  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()

可以看到,四种解压代码略有不同,推荐大家实际演示中自己体会一下差别,解压后配合 os.remove()  就可以删除压缩包,现在看看逻辑框架补上解压函数后的内容:

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)

5. 实现实时检测

比较简单的方法就是建立 while True 死循环配合 time.sleep()睡眠,框架如下:

import time  while True:     func()     time.sleep(5) # 睡眠秒数可以设置大一点避免过度占用资源

最后将第二步的实现代码改为函数并放在循环框架中就可以完成本次需求,完整代码如下:

import glob import os import gzip import tarfile import zipfile import rarfile import time  path = r'C:\xxxx\download' file_lst = glob.glob(path + '/*') filename_lst = [os.path.basename(i) for i in file_lst]  def ungz(filename):     filenamefilename = filename[:-3]     gz_file = gzip.GzipFile(filename)     with open(filename, "w+") as file:         file.write(gz_file.read())     return filename  def 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)

到此,相信大家对“怎么让Python在后台自动解压各种压缩文件”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 如何对压缩文件设置解压密码
  2. linux怎么解压和压缩文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何通过实例学习React中事件节流防抖

下一篇:python如何通过实例了解反射机制

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》