def extract(self): members = self.zf.infolist() if self.show_info: self.start_extract() total = 0 for zip_info in members: total += zip_info.file_size if not self.regex_util or not self.regex_util.do_match(spit_filename(zip_info.filename, True)): if len(zip_info.filename) + len(self.work_path) + 1 < 255: self.zf.extract(zip_info.filename, self.work_path) if self.eu_text and spit_filename(zip_info.filename, True) == "important.properties": file_path = os.path.join(self.work_path, zip_info.filename) try: cf = MyConfigParser(file_path, file_error=True) regrex = ["\$\{" + key + "\}" for key in cf.keys()] self.eu_text.add_regex(regrex) except Exception as exe: print exe print self.work_path + "/" + zip_info.filename if self.show_info: self.update_extract(total) else: print "path len > 255 ", self.work_path, zip_info.filename else: pass if self.show_info: self.finish_extract() self.zf.close()
def __init__(self, zip_file_path, work_path, config_path, show_extract_progress=False, analyze_info=None, extract_progress=None): self.zip_file_path = zip_file_path self.work_path = work_path + os.sep + spit_filename(zip_file_path) + os.sep self.show_extract_progress = show_extract_progress self.is_extract_root = False self.extract_progress = extract_progress self.analyze_info = analyze_info self.cf = MyConfigParser(config_path, encoding="UTF-8") self.eu_file = ConfigRegexUtil(self.cf, "exclude_file") self.eu_text = ConfigRegexUtil(self.cf, "exclude_txt") self.search_regex = ConfigRegexUtil(self.cf, "search_regex")
def __walk(self, file_path): if not self.is_extract_root: self.is_extract_root = True self.__extract_root() walk_res = os.walk(file_path) for dir_path, dir_names, file_names in walk_res: for file_name in file_names: abs_file_path = os.path.join(dir_path, file_name) ext = spit_ext(abs_file_path) if ext == "jar": if not self.eu_file.do_match(file_name): jar_extract_path = dir_path + os.sep + spit_filename(file_name) ef = self.make_extract(abs_file_path, jar_extract_path) ef.clean_work_path() ef.extract() self.__walk(jar_extract_path) else: if not self.eu_file.do_match(file_name): self.analyze_file(abs_file_path)