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

获取文件中每个单词的行号:代码运行异常问题求助

排查并修复「获取文件单词对应行号」代码的问题

我看了你的代码,出现单词被切片、提示类型错误的问题,主要是因为几个逻辑和语法上的小失误,咱们一步步拆解修复:

原代码的核心问题

  • 字典值的类型设计错误:你原本想存行号列表,但却把orddic[x]初始化为数字1,后续又错误地修改了变量x的类型(x=list().append(counter)这行完全不对,append方法返回None,而且这会把原本的单词字符串x改成None,后续判断自然混乱)
  • 重复判断导致逻辑冲突:你写了两个if x in orddic的判断,不管单词是否存在都会执行第二次判断,导致计数和行号列表完全乱掉
  • 打印时错误处理字符串:最后用list(m)处理单词m,字符串转列表会把每个字符拆成元素,这就是你看到「单词被切片」的原因

修复后的完整代码

orddic = dict()
counter = 0
path = "你的输入文件路径"
path2 = "你的输出文件路径"

with open(path, "r") as f, open(path2, 'w') as g:
    # 跳过第一行(对应原代码的f.readline())
    f.readline()
    for rowf in f:
        counter += 1
        # 统一处理行内容:去除首尾空白、移除制表符、按空格拆分单词
        row_content = rowf.strip().replace("\t", "")
        words = row_content.split(" ")
        # 过滤连续空格产生的空字符串,避免无效空键
        words = [word for word in words if word]
        
        for word in words:
            # 单词不在字典中时,初始化空行号列表
            if word not in orddic:
                orddic[word] = []
            # 将当前行号追加到对应单词的列表中
            orddic[word].append(counter)
    
    # 遍历字典,同时输出到控制台和写入文件
    for word, line_numbers in orddic.items():
        result_line = f"{word} ---------Antall: {len(line_numbers)} ---------Linje:{line_numbers}\n"
        print(result_line.strip())
        g.write(result_line)

关键修复点说明

  • 统一字典值类型:每个单词对应的值改为存储行号的列表,出现次数直接通过len(line_numbers)获取,不用单独维护计数器,逻辑更简洁可靠
  • 修正变量操作逻辑:不再修改循环中的单词变量,只操作字典对应的行号列表,避免类型混乱
  • 过滤无效空单词:处理连续空格导致的空字符串问题,避免字典中出现无意义的空键
  • 正确输出行号列表:直接使用字典中存储的行号列表,不再将单词字符串转为列表,彻底解决「单词被切片」的问题
  • 简化文件操作:合并两个with语句,符合Python简洁的上下文管理器用法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:32:49