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

如何使用计数器法读取文件并提取不含键名的目标内容?

用计数器法提取文本中的姓名与玩家编号

嘿,我来帮你把这个计数器法的代码补全,刚好匹配你要处理的文本格式~

首先明确咱们的思路:每组数据里都固定有name和player两个字段,用一个计数器追踪当前处理的是第几个值——计数器为1时对应姓名,为2时对应玩家编号,每处理完一组就重置计数器,把配对好的数据存进列表里。

完整代码实现

filename = open("testing.txt","r", encoding = "utf-8")
playerFile = filename
lst = []

for line in playerFile:
    line = line.replace('\n','')  # 去掉换行符
    # 把每行按空格分割,过滤掉空内容(避免多余空格干扰)
    elements = [item.strip() for item in line.split() if item.strip()]
    
    count = 0
    current_name = ""
    current_player = ""
    
    for elem in elements:
        # 判断当前元素是字段标识(带冒号)还是对应的值
        if elem.endswith(':'):
            count += 1  # 遇到标识就递增计数器,准备接收对应值
        else:
            # 根据计数器值分配到对应变量
            if count == 1:
                current_name = elem
            elif count == 2:
                current_player = elem
    
    # 把配对好的一组数据添加到列表(这里用元组,也可以换成字典格式)
    lst.append( (current_name, current_player) )

# 记得关闭文件哦
filename.close()

# 可以打印结果验证
print(lst)

代码小说明

  • 先对每行内容做了清理:去掉换行符,再按空格分割成元素列表,同时过滤空字符串,避免多余空格导致的错误。
  • 计数器count是核心:遇到name:时count变为1,接下来的元素就是姓名;遇到player:时count变为2,接下来的元素就是玩家编号。
  • 每处理完一行(一组数据),就把配对好的姓名和编号以元组形式存入列表,最终你会得到[('James', '2'), ('Martin', '3'), ...]这样的结果。
  • 要是想更优雅地管理文件,可以把开头的文件打开改成with open("testing.txt","r", encoding="utf-8") as playerFile:,这样不用手动写close(),程序会自动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:45