Python读取文件获取最长最短行 最短行输出不符合预期求助
问题排查与修复方案
核心错误点
- 缩进错误:
longest()函数内的大部分代码没有正确缩进,属于全局作用域代码;shortest()函数下的代码也没有缩进,本身存在语法问题。 - 变量覆盖错误:你将文件对象命名为
file,遍历过程中又把file赋值为当前行分割后的列表,直接销毁了原文件对象,循环结束后file仅保留最后一行的分割结果,根本无法遍历所有行。你之前最长行输出符合预期纯属巧合,刚好最后一行的处理结果是最长的。 - 分割取值错误:
split('|')[0:1]得到的是单元素列表而非字符串,直接计算长度永远为1,完全不符合按文本内容长度统计的需求,正确写法是split('|')[0]取第一部分的字符串。 - 文件指针问题:文件对象遍历一次后指针会落到文件末尾,再次遍历无法读取到内容,你没有做指针重置操作。
- 路径转义风险:Windows路径的反斜杠可能被识别为转义字符,建议在路径字符串前加
r标记为原始字符串。 - 资源泄漏风险:文件打开后没有执行关闭操作,建议使用
with上下文管理器自动管理文件生命周期。
修正后可运行代码
# 预处理所有行:按|分割取第一部分,统一存储到列表 def get_processed_lines(file_path): processed_lines = [] with open(file_path, "r", encoding="utf-8") as f: for line in f: first_part = line.split('|')[0] # 如果需要去除行首尾的换行、空格可以加.strip(),不需要就删掉 # first_part = first_part.strip() processed_lines.append(first_part) return processed_lines def longest(file_path): lines = get_processed_lines(file_path) max_len_line = max(lines, key=len) print("最长行:", max_len_line) def shortest(file_path): lines = get_processed_lines(file_path) min_len_line = min(lines, key=len) print("最短行:", min_len_line) # 路径前加r避免转义问题 file_path = r"D:\PythonWorkspace\CS1400\sample.txt" longest(file_path) shortest(file_path)
内容的提问来源于stack exchange,提问作者Dongook Kim
相关产品推荐
相关产品推荐

