当前位置:   article > 正文

[python]批量解压文件夹下所有压缩包(rar、zip、7z)_7z批量解压

7z批量解压

        在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。

        常见的压缩包格式有rar、zip、7z,Franpper将这几种文件的解压方式都写在了方法里,下面以7z为例为大家详细介绍一下,全部完整代码见最底部。

目录

一、代码介绍

二、注意事项

三、完整代码


一、代码介绍

        首先是函数mkdir函数,用来新建文件夹存放解压文件。

  1. def mkdir(path):
  2. isExists = os.path.exists(path)
  3. if not isExists:
  4. os.makedirs(path)
  5. print(path + '创建成功')
  6. else:
  7. print(path + '目录已存在')

         生成unzip_log.txt日志文件,用来记录解压失败的文件路径,这些文件需要手动解压。

 wrong_log = os.path.join(folder_path, 'unzip_log.txt')

         递归遍历文件夹时,获取文件夹中所有文件夹的名字,如果压缩包的名字与同目录下文件夹(若存在)的名字相同,则认为已经被解压过,不对其进行解压操作。

  1. contents = os.listdir(root)
  2. folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))]

         对于要解压的文件,获取其名字,生成文件夹。

  1. zipFile_name = file.split('.')[0:-1]
  2. zipFile_name = '.'.join(zipFile_name)

         接下来进行解压操作:

  1. with py7zr.SevenZipFile(zipFile_path, mode='r') as z:
  2. z.extractall(path=unzip_zipFile_path)

        解压失败的文件路径记录到日志中:

  1. with open(wrong_log, 'a') as f:
  2. f.write(f'\n {zipFile_path}')

 二、注意事项

        需要注意的是:

        1) 在使用rarfile解压rar文件的时候会出现解压失败的情况,需要将winrar的目录中的UnRAR.exe,拷贝至python脚本目录下。如下图:

        2) 使用zipfile加压zip文件的时候会出现解压文件乱码的情况,需要将zipfile.py文件中两处按下图修改。

三、完整代码

  1. import os
  2. import zipfile
  3. import rarfile
  4. import py7zr
  5. """
  6. 解压文件
  7. """
  8. def mkdir(path):
  9. isExists = os.path.exists(path)
  10. if not isExists:
  11. os.makedirs(path)
  12. print(path + '创建成功')
  13. else:
  14. print(path + '目录已存在')
  15. def unzipFile(folder_path):
  16. wrong_log = os.path.join(folder_path, 'unzip_log.txt')
  17. for root, dirs, files in os.walk(folder_path):
  18. contents = os.listdir(root)
  19. folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))] # 该目录下文件夹名称列表
  20. for file in files:
  21. if file.endswith('7z'):
  22. zipFile_name = file.split('.')[0:-1]
  23. zipFile_name = '.'.join(zipFile_name)
  24. if zipFile_name in folders:
  25. continue
  26. # 没有重名文件则进行解压
  27. else:
  28. # 创建解压文件夹路径
  29. unzip_zipFile_path = os.path.join(root, zipFile_name)
  30. mkdir(unzip_zipFile_path)
  31. zipFile_path = os.path.join(root, file)
  32. print(zipFile_path)
  33. try:
  34. with py7zr.SevenZipFile(zipFile_path, mode='r') as z:
  35. z.extractall(path=unzip_zipFile_path)
  36. except:
  37. with open(wrong_log, 'a') as f:
  38. f.write(f'\n {zipFile_path}')
  39. elif file.endswith('rar'): # file 是待解压文件
  40. # 有重名文件说明被解压过,跳过
  41. rarFile_name = file.split('.')[0:-1]
  42. rarFile_name = '.'.join(rarFile_name)
  43. if rarFile_name in folders:
  44. continue
  45. # 没有重名文件则进行解压
  46. else:
  47. # 创建解压文件夹路径
  48. unzip_rarFile_path = os.path.join(root, rarFile_name)
  49. mkdir(unzip_rarFile_path)
  50. rarFile_path = os.path.join(root, file)
  51. print(rarFile_path)
  52. try:
  53. with rarfile.RarFile(rarFile_path) as rar_ref:
  54. rar_ref.extractall(unzip_rarFile_path)
  55. except:
  56. pass
  57. with open(wrong_log, 'a') as f:
  58. f.write(f'\n {rarFile_path}')
  59. elif file.endswith('zip'): # file 是待解压文件
  60. # 有重名文件说明被解压过,跳过
  61. rarFile_name = file.split('.')[0:-1]
  62. rarFile_name = '.'.join(rarFile_name)
  63. if rarFile_name in folders:
  64. continue
  65. # 没有重名文件则进行解压
  66. else:
  67. # 创建解压文件夹路径
  68. unzip_rarFile_path = os.path.join(root, rarFile_name)
  69. mkdir(unzip_rarFile_path)
  70. rarFile_path = os.path.join(root, file)
  71. print(rarFile_path)
  72. try:
  73. with zipfile.ZipFile(rarFile_path, 'r') as zip_ref:
  74. zip_ref.extractall(unzip_rarFile_path)
  75. except:
  76. with open(wrong_log, 'a') as f:
  77. f.write(f'\n {rarFile_path}')
  78. else:
  79. continue
  80. unzipFile(r"G:\work\")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/320580
推荐阅读
相关标签
  

闽ICP备14008679号