手动点击压缩包解压太麻烦?python解放你的双手

上周我们讲过如何通过python给文件归类,然后有的朋友反映说这个归类不怎么方便,因为有时候下载的是压缩包,不想自己一个一个点解压缩,要是可以进行批量解压缩然后再自动归类,就更好了。

于是我研究了如何处理压缩包的问题,来分析一下需求。

·首先我们需要判断这个文件是压缩包,压缩包有很多种后缀,包括rar,zip,7z等格式。这里rar格式目前比较常用,那我们就先认为是rar吧,以它为例,后续还可以再完善。

·对这些找到的压缩包进行解压缩

·删掉对应压缩包

那下面就开始写代码。

1找到解压缩文件

首先,这里面需要进行文件的操作,那还是和上次一样,需要用os库和shutil库来进行处理。

import os
import shutil

首先要检索压缩包文件,这里面为了方便最后给这个压缩包进行寻找,解压,删除一条龙服务,我们这里可以使用函数,这样后期操作也会很方便。

def find_rar():

为了让小伙伴继续复习之前的这个文件整理操作,我们就硬性要求,他需要给这个python放到都是rar文件的文件夹内。这样我也能偷个懒,在判断路径的时候,写到当前路径的就好。

for rar in os.listdir():

然后进行判断是否为rar文件,那这里面还是和上次一样,用后缀名来判断:

if rar.endswith(‘.rar’):
return rar

好了,这部分就是一个对于判断rar文件的检索了。

整理一下代码段:

def find_rar():
  for rar in os.listdir():
      if rar.endswith('.rar'):
          return rar

这里可能会有一些疑问,我们已经把所有文件都放在全都是rar文件的文件夹里面,为什么还要判断文件是不是rar的,是不是有点多此一举呢?

这是为了避免一些人懒惰到没有提前操作归类的步骤,先判断一下也就一句代码的事情,但是会减少很多特殊情况的发生。

2解压缩文件

我们还是定义一个函数;

def unzip():

首先我们要给这些文件名获取到,才能知道解压缩哪个文件。那应该用什么来进行获取压缩包文件名呢?

用split方法就OK啦。

find_rar_name = rar.split(‘.’)[0]

通过split这个方法是可以给rar文件的完整名字截取成为两部分,一个是文件名,另外一个是.rar后缀。rar.split(‘.’)[0] 就是不要rar后缀的那部分名字

获取到文件名之后,要和当前路径进行拼接作为完整路径,并且建立对应的文件夹;

path = os.path.join(‘.’,find_rar_name)
os.makedirs(path)

最后一步将文件解压缩到这里面:

shutil.unpack_archive(rar,path)

解压缩文件这部分也完成了。代码如下:

def unzip():
   find_rar_name = rar.split(‘.’)[0]
  path = os.path.join(‘.’,find_rar_name)
os.makedirs(path)
   shutil.unpack_archive(rar,path)

这部分要说明下,如果想直接解压缩到当前文件夹的话,就可以直接用shutil.unpack_archive进行解压缩即可,这里面是给每个解压缩文件建立了一个文件夹来放对应的文件。

3删除压缩包

删除压缩包就比较简单了,用os库下面的remove方法就可以,但是这里要注意要延迟一些时间,和时间相关的库就是time库了。

import time
def del_rar(rar):
  os.remove(rar)
  time.sleep(5)

time的sleep方法是让程序停止多少秒,这个在爬虫中经常用到,为了避免被网站反爬会让程序等待一段时间执行,这是防止执行太快出现错误。

注意一个问题,要确认解压缩的文件是rar,而不是其他后缀的,那还需要一个判断;

while True:
  rar_file = find_rar()
  if rar_file:

如果前面的等式成立的话,那就可以执行后面的判断啦

      unzip(rar_file)
      del_rar(rar_file)

最后不要忘记让程序停几秒哦

      time.sleep(5)

好啦,解压缩的问题就解决完了。

为了方便大家查看,完整版代码在下面哦~

import os
import shutil
import time

def find_rar():
  for rar in os.listdir():
      if rar.endswith('.rar'):
          return rar

def unzip():
   find_rar_name = rar.split(‘.’)[0]
  path = os.path.join(‘.’,find_rar_name)
os.makedirs(path)
   shutil.unpack_archive(rar,path) 

def del_rar(rar):
  os.remove(rar)
  time.sleep(5)

while True:
  rar_file = find_rar()
  if rar_file:
      unzip(rar_file)
      del_rar(rar_file)
      time.sleep(5)

更多精彩,请关注公众号:DC学习助手

猜你喜欢

转载自blog.csdn.net/weixin_33827590/article/details/86887285