上周我们讲过如何通过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学习助手