You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本处理Clearcase容量文本导出Excel仅生成表头问题排查

问题排查与修复方案

原代码核心问题

  1. 分支逻辑错误:所有目标行同时满足以Total开头和包含is,但代码使用elif分支,导致仅执行TAG提取逻辑,Size提取逻辑完全不会触发,fullentry列表中只有TAG数据,缺少Size。
  2. 批量写入条件错误:代码判断temp == 12才写入Excel行,但每行仅需2个数据(TAG+Size),该条件永远无法满足,因此没有任何数据被写入表格。
  3. Size提取方式不可靠:使用固定切片s+7:20提取容量,当数值长度变化时会提取错误内容。
  4. 文件模式与编码问题:用二进制模式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()

修复说明

  1. 正则提取:用re.compile预编译正则表达式,精准匹配引号内的路径和容量信息,避免字符串索引的硬编码问题。
  2. 分支逻辑修正:无需分分支判断,直接对每行做正则匹配,匹配成功则提取数据。
  3. 文件处理优化:使用with语句自动管理文件关闭,文本模式打开并指定编码(推荐UTF-8,可根据实际文件编码调整)。
  4. 写入逻辑简化:每匹配到一行数据就直接写入Excel,无需额外的列表缓存和批量判断,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Champs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:35:30