Python脚本处理Clearcase容量文本导出Excel仅生成表头问题排查
问题排查与修复方案
原代码核心问题
- 分支逻辑错误:所有目标行同时满足
以Total开头和包含is,但代码使用elif分支,导致仅执行TAG提取逻辑,Size提取逻辑完全不会触发,fullentry列表中只有TAG数据,缺少Size。 - 批量写入条件错误:代码判断
temp == 12才写入Excel行,但每行仅需2个数据(TAG+Size),该条件永远无法满足,因此没有任何数据被写入表格。 - Size提取方式不可靠:使用固定切片
s+7:20提取容量,当数值长度变化时会提取错误内容。 - 文件模式与编码问题:用二进制模式
r+b打开文本文件,且强制使用gb2312解码,若原文件为UTF-8编码会引发乱码或解码失败。
修复后的代码
推荐使用正则表达式提取数据,逻辑更简洁可靠:
import xlwt from svnscripts.timestampdirectory import createdir, path_dir import os import re def clearcasesize(): pathdest = path_dir() dest = createdir() txtName = rf"{pathdest}\vobs_size.txt" workBook = xlwt.Workbook(encoding='utf-8') workSheet = workBook.add_sheet('sheet1') # 写入表头 workSheet.write(0, 0, "TAG") workSheet.write(0, 1, "Size") row = 1 # 正则表达式匹配:捕获引号内的路径和数字+Mb的容量 pattern = re.compile(r'vob "(/[^"]+)" is (\d+\.\d+ Mb)') # 用文本模式打开文件,自动处理编码(可根据实际情况指定encoding参数) with open(txtName, 'r', encoding='utf-8', errors='ignore') as fp: for linea in fp: linea = linea.strip() if not linea: continue # 匹配当前行 match = pattern.search(linea) if match: tag = match.group(1) size = match.group(2) # 写入Excel workSheet.write(row, 0, tag) workSheet.write(row, 1, size) row += 1 # 达到xls最大行数限制时停止 if row >= 65536: break workBook.save(os.path.join(dest, "ClearcaseSize.xls")) clearcasesize()
修复说明
- 正则提取:用
re.compile预编译正则表达式,精准匹配引号内的路径和容量信息,避免字符串索引的硬编码问题。 - 分支逻辑修正:无需分分支判断,直接对每行做正则匹配,匹配成功则提取数据。
- 文件处理优化:使用
with语句自动管理文件关闭,文本模式打开并指定编码(推荐UTF-8,可根据实际文件编码调整)。 - 写入逻辑简化:每匹配到一行数据就直接写入Excel,无需额外的列表缓存和批量判断,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Champs
相关产品推荐
相关产品推荐

