获取文件中每个单词的行号:代码运行异常问题求助
排查并修复「获取文件单词对应行号」代码的问题
我看了你的代码,出现单词被切片、提示类型错误的问题,主要是因为几个逻辑和语法上的小失误,咱们一步步拆解修复:
原代码的核心问题
- 字典值的类型设计错误:你原本想存行号列表,但却把
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
相关产品推荐
相关产品推荐

