1 ‘‘‘ 解压一个.zip文件或一个目录下的所有.zip文件到指定目录。 2 3 运行方法: 4 格式: 5 python unzip.py "source_dir" "dest_dir" password 6 参数说明: 7 source_dir和dest_dir既可以绝对路径也可以为相对路径。用""将它们括起为了防止路径中出现空格。 8 source_dir和dest_dir的缺省值表示当前目录。 9 password缺省表示压缩文件未加密。 10 注意: 11 1. 若目录太长,可以将上述语句直接写入.bat脚本,然后运行脚本。 12 2. 密码的编码格式为“utf-8”,且不支持WinRAR中zip格式的默认加密算法--CBC模式下的AES-256。 13 若想要WinRAR加密压缩的.zip文件能用本程序顺利解压,请在加密压缩时勾选“ZIP传统加密”。 14 ‘‘‘ 15 16 import sys, os, zipfile 17 18 def unzip_single(src_file, dest_dir, password): 19 ‘‘‘ 解压单个文件到目标文件夹。 20 ‘‘‘ 21 if password: 22 password = password.encode() 23 zf = zipfile.ZipFile(src_file) 24 try: 25 zf.extractall(path=dest_dir, pwd=password) 26 except RuntimeError as e: 27 print(e) 28 zf.close() 29 30 def unzip_all(source_dir, dest_dir, password): 31 if not os.path.isdir(source_dir): # 如果是单一文件 32 unzip_single(source_dir, dest_dir, password) 33 else: 34 it = os.scandir(source_dir) 35 for entry in it: 36 if entry.is_file() and os.path.splitext(entry.name)[1]==‘.zip‘ : 37 unzip_single(entry.path, dest_dir, password) 38 39 if __name__ == "__main__": 40 41 # 获取源路径和目标路径 42 source_dir = os.getcwd() 43 dest_dir = os.getcwd() 44 password = None 45 if len(sys.argv) == 2: # 指定了压缩文件所在路径 46 source_dir = sys.argv[1] 47 if len(sys.argv) == 3: # 压缩文件所在和解压到路径均指定 48 source_dir, dest_dir = os.path.abspath(sys.argv[1].strip(‘"‘)), os.path.abspath(sys.argv[2].strip(‘"‘)) 49 if len(sys.argv) == 4: # 还指定了密码 50 source_dir, dest_dir, password = os.path.abspath(sys.argv[1].strip(‘"‘)), os.path.abspath(sys.argv[2].strip(‘"‘)), sys.argv[3] 51 if len(sys.argv) > 4: 52 print(‘过多的参数,可能是路径中有空白字符,请用""将路径括起。‘) 53 exit() 54 55 print("源目录:", source_dir) 56 print("解压到:", dest_dir) 57 print("解压密码:", password) 58 59 # 判断源路径是否合法 60 if not os.path.exists(source_dir): 61 print("压缩文件或压缩文件所在路径不存在!") 62 exit() 63 if not os.path.isdir(source_dir) and not zipfile.is_zipfile(source_dir): 64 print("指定的源文件不是一个合法的.zip文件!") 65 exit() 66 67 # 如果解压到的路径不存在,则创建 68 if not os.path.exists(dest_dir): 69 os.mkdir(dest_dir) 70 71 unzip_all(source_dir, dest_dir, password)
原文地址:https://www.cnblogs.com/fyqq0403/p/9710420.html
时间: 2024-10-29 03:03:29