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

如何修复Python代码:提取cap编号并统计File2对应数据量

修正文本匹配与统计代码的方案

需求回顾

从file1.txt中提取以cap开头的编号(如将cap00001转换为整数1),然后在file2.txt中匹配这些编号对应的capNo列,统计每个有效capNo的出现次数,输出指定格式的结果。

原代码的问题

  • 语法错误:Python关键字with被写成大写With,直接导致代码无法运行
  • 编号转换逻辑错误:match.remove(cap0000)完全不符合语法——cap0000是字符串需加引号,且remove方法会修改原列表并返回None,不能直接赋值;更合理的方式是用正则捕获数字部分,而非手动移除前缀
  • 数据处理错误:直接读取file2.txt为字符串后调用groupby,但字符串没有这个方法,必须用pandas将文件解析为DataFrame才能进行分组统计
  • 逻辑效率低下:循环中每匹配到一个cap就重复打开file2.txt,既浪费资源又导致统计逻辑混乱

修正后的代码

import re
import pandas as pd

# 从file1.txt提取所有有效capNo并转成整数
cap_numbers = []
with open("file1.txt", "r") as infile1:
    for line in infile1:
        # 正则捕获cap后面的数字部分,自动忽略前缀
        matches = re.findall(r'cap(\d+)', line)
        if matches:
            # 把捕获的数字字符串转成整数,自动去除前导零
            cap_num = int(matches[0])
            cap_numbers.append(cap_num)

# 去重,避免重复统计同一个capNo
cap_numbers = list(set(cap_numbers))

# 读取file2.txt为DataFrame,处理空格分隔的格式
df = pd.read_csv("file2.txt", sep=r'\s+')

# 筛选出capNo在提取列表中的行,然后分组统计数量
filtered_df = df[df['capNo'].isin(cap_numbers)]
result = filtered_df.groupby('capNo').size().reset_index(name='counts')

# 按期望格式输出结果
print("capNo   counts")
for _, row in result.iterrows():
    print(f"{row['capNo']}   {row['counts']}")

代码说明

  • 正则表达式r'cap(\d+)'直接捕获cap后面的数字部分,无需手动处理前缀,简洁高效
  • 用pd.read_csv配合sep=r'\s+'处理file2.txt的空格分隔格式,自动识别列名
  • 用isin方法筛选出与file1匹配的capNo行,再通过groupby.size()统计每个编号的出现次数
  • 最后按指定格式打印结果,与期望输出一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:48:10