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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:03