Guest User

Untitled

a guest
Mar 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. import os
  2. import zipfile
  3. import rarfile
  4.  
  5.  
  6. def decompress(name, select=lambda file_name, extension: True):
  7. # get file path and extension name
  8. path_name, f_n = os.path.split(name)
  9. _, ext = os.path.splitext(f_n)
  10. # create compressed file object
  11. if ext == '.zip':
  12. sub_file = zipfile.ZipFile(name)
  13. elif ext == '.rar':
  14. sub_file = rarfile.RarFile(name)
  15. else:
  16. return
  17.  
  18. # recode GBK as UTF-8
  19. for component in sub_file.namelist():
  20. try:
  21. utf8_name = component.decode('utf-8')
  22. except UnicodeDecodeError:
  23. utf8_name = component.decode('gbk').encode('utf-8')
  24.  
  25. # filter files
  26. _, extension = os.path.splitext(utf8_name)
  27. if extension in ['.zip', '.rar'] or select(utf8_name, extension):
  28. utf8_name = path_name + '/' + utf8_name
  29. pathname = os.path.dirname(utf8_name)
  30. if not os.path.exists(pathname) and pathname != '':
  31. os.makedirs(pathname)
  32. data = sub_file.read(component)
  33. if not os.path.exists(utf8_name):
  34. fo = open(utf8_name, "w")
  35. fo.write(data)
  36. fo.close()
  37. # decompress recursively
  38. decompress(utf8_name, select)
  39. sub_file.close()
  40. os.remove(name)
Add Comment
Please, Sign In to add comment