You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.9 KiB
68 lines
1.9 KiB
import os |
|
from log import logger, log_info |
|
|
|
|
|
# 需要安装winrar和7z并且配置环境变量 |
|
|
|
class UnzipFile: |
|
def __init__(self): |
|
pass |
|
|
|
# 处理zip和rar |
|
@staticmethod |
|
def unzip_zip(source, password=""): |
|
# 准备参数 |
|
cmd = 'WinRAR.exe e -y -ibck -ilog.\\winrar.log' |
|
files = '*.*' |
|
args = '-or' |
|
if password: |
|
pwd = '-hp"' + str(password).strip() + '"' |
|
else: |
|
pwd = '' |
|
target = os.path.splitext(source)[0] + '\\' |
|
# 组装参数 |
|
cmd_list = [cmd, '"' + source + '"', files, '"' + target + '"', pwd, args] |
|
cmd_str = ' '.join(cmd_list) |
|
# 打印日志 |
|
log_info(cmd_str) |
|
# 解压并处理结果 |
|
r = os.system(cmd_str) |
|
if r == 0 and os.path.exists(target): |
|
return True |
|
return False |
|
|
|
# 处理7z相关 |
|
@staticmethod |
|
def unzip_7z(source, password=""): |
|
# 准备参数 |
|
cmd = '7z.exe x -y ' |
|
args = '-o' |
|
if password: |
|
pwd = '-p"' + str(password) + '"' |
|
else: |
|
pwd = '' |
|
target = os.path.splitext(source)[0] + '\\' |
|
# 组装参数 |
|
cmd_list = [cmd, '"' + source + '"', args + '"' + target + '"', pwd] |
|
cmd_str = ' '.join(cmd_list) |
|
# 打印日志 |
|
log_info(cmd_str) |
|
# 解压并处理结果 |
|
r = os.system(cmd_str) |
|
if r == 0 and os.path.exists(target): |
|
return True |
|
return False |
|
|
|
# 打包一个通用方法 |
|
def unzip(self, source, password=""): |
|
ext = os.path.splitext(source)[1] |
|
if ext == '.7z' or ext == '.001' or ext == '.wim': |
|
result = self.unzip_7z(source, password) |
|
else: |
|
result = self.unzip_zip(source, password) |
|
log_info(f'解压结果: {result}') |
|
return result |
|
|
|
|
|
if __name__ == '__main__': |
|
pass
|
|
|