python使用多进程multiprocessing批量执行,pool.apply_async解压缩文件。(可以是其他任务,开辟进程池)
import os
import zipfile
import multiprocessing
import datetime
#author by AHCH_yangdebin
path=r'D:\研究\安徽底图20181226\anhui_20181225_zip\vec_w\340000000_安徽省_00000001_vec_w'
path_read=[] #Zip文件路径集合
unPack_dir=r'D:\AH_TileData\vec_w',
count=0
allCount=0
date1=''
date2=''
def check_if_dir(filepath):
temp_list = os.listdir(filepath)
#print(temp_list) #文件夹名称(仅名字)集合
for temp_list_each in temp_list:
pathName = filepath + '/' + temp_list_each
if os.path.isfile(pathName):
if os.path.splitext(pathName)[-1] == '.zip':
path_read.append(pathName)
else:
continue
else:
check_if_dir(pathName)
def UnpackZip(zipfilePath,count,jieYaLv):
subPath = zipfilePath[count:-3] # 截取后面的路径(不包含.zip)。如:\340000000_安徽省_00000013_vec_w\16\0100\2126\0703
# print(subPath)
unPack_path = unPack_dir + subPath
with zipfile.ZipFile(zipfilePath,mode="a") as f:
f.extractall(unPack_path)
f.close()
print(jieYaLv)
def main():
k=0
pool = multiprocessing.Pool()
for zipFile_path in path_read:
k=k+1
jieyaLv= "已解压完成:" + str(k * 100 / allCount) + "%"
pool.apply_async(UnpackZip,(zipFile_path,count,jieyaLv))
pool.close()
pool.join()
print("---------------------已解压完成:" + "100%----Successful----------------------")
date2 = datetime.datetime.now()
print("结束时间:" + str(date2))
print("总消耗时间:" + str(date2 - date1))
if __name__ =='__main__':
date1 = datetime.datetime.now()
print("开始时间:" + str(date1))
print("---------------------开始查找所有Zip---------------------")
check_if_dir(path)
print("Zip文件总个数:" + str(len(path_read)))
print("---------------------查找到所有Zip----Successful---------------------")
print("---------------------开始解压Zip---------------------")
count = len(path)
allCount = len(path_read)
main()

该博客介绍了如何使用Python的multiprocessing模块实现多进程批量解压缩文件。通过定义check_if_dir函数遍历查找ZIP文件,然后使用UnpackZip函数进行解压缩,主函数main中创建进程池并异步执行解压任务,实时打印解压进度。整个过程提高了文件解压缩的效率。
1579

被折叠的 条评论
为什么被折叠?



