def command_wad_extract(parser, args): if not os.path.isfile(args.wad): parser.error("WAD file does not exist") if not args.output: args.output = os.path.splitext(args.wad)[0] if os.path.exists(args.output) and not os.path.isdir(args.output): parser.error("output is not a directory") if args.hashes is None: hashfile = default_hashfile(args.wad) else: hashfile = HashFile(args.hashes) wad = Wad(args.wad, hashes=hashfile.load()) if args.unknown == 'yes': pass # don't filter elif args.unknown == 'only': wad.files = [wf for wf in wad.files if wf.path is None] elif args.unknown == 'no': wad.files = [wf for wf in wad.files if wf.path is not None] if args.pattern: wad.files = [ wf for wf in wad.files if any(wf.path is not None and fnmatch.fnmatchcase(wf.path, p) for p in args.pattern) ] wad.guess_extensions() wad.extract(args.output, overwrite=not args.lazy)
def command_wad_list(parser, args): if not os.path.isfile(args.wad): parser.error("WAD file does not exist") if args.hashes is None: hashfile = default_hashfile(args.wad) else: hashfile = HashFile(args.hashes) wad = Wad(args.wad, hashes=hashfile.load()) wadfiles = [(wf.path or ('?.%s' % wf.ext if wf.ext else '?'), wf.path_hash) for wf in wad.files] for path, h in sorted(wadfiles): print(f"{h:016x} {path}")
def wad_extract(filename, output=None): """ WAD文件解包 :param filename: 输入文件名 :param output: 输出目录名 :return: """ if not output: output = os.path.splitext(filename)[0] if not os.path.exists(output): os.mkdir(output) hashfile = default_hashfile(filename) wad = Wad(filename, hashes=hashfile.load()) wad.guess_extensions() wad.extract(output, overwrite=True)