def handle_uploaded_file(f, system, province, reporter): ''' 处理巡检人员提交的巡检报告文件 f表示提交的报告压缩文件 system表示巡检的系统 province表示所在的省 reporter表示提交人员 ''' report_path = "" #在服务器上创建路径存储巡检人员提交的报告 try: path = settings.MEDIA_ROOT + system + os.path.sep + province + os.path.sep + reporter + time.strftime('\\%Y\\%m\\%d\\%H%M%S\\') if not os.path.exists(path): os.makedirs(path) zip_file = open('report.zip', 'wb+') for chunk in f.chunks(): zip_file.write(chunk) zip_file.close() zip = zipfile.ZipFile('report.zip') for filename in zip.namelist(): data = zip.read(filename) filename = os.path.split(filename)[1] file = open(os.path.join(path, filename), 'wb+') file.write(data) file.close() logger.info(filename + u'已上传到服务器' + path) if filename == 'report.html': logger.info(u'找到report.html') report_path = os.path.join(path, filename) report_path = report_path.replace(settings.MEDIA_ROOT, '') #抽取通过测试的数目和未通过的数目 pattern = re.compile(r'"fail":\d+,"label":"All Tests","pass":\d+') match = pattern.search(data) str = match.group() nums = re.findall(r'\d+', str) fail_num = int(nums[0]) pass_num = int(nums[1]) logger.info(u'抽取通过测试的数目和未通过的数目') elif filename == 'output.xml': logger.info(u'找到output.xml') output_xml_path = os.path.join(path, filename) parser = Parser(logger) apdex_index = parser.calculate_apdex(output_xml_path) except Exception, e: logger.error(e)