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

Python实现:将文本文件中高分学生姓名合并至同一行指定格式输出

嘿,我来帮你搞定这两个文本处理的问题!

文本文件处理问题解答

问题1:如何在文本文件中合并两行不同的内容?

其实合并两行内容的思路很简单,核心是先读取所有行内容,然后根据需求拼接,最后写入文件。常见场景的处理方式:

  • 如果是把文件里的每两行合并成一行:先读取所有行,循环每两行进行拼接;
  • 如果是合并特定的两行(比如已知行号):直接读取对应行的内容,处理掉多余换行符后拼接即可。

举个简单的代码示例(假设要合并文件的第1行和第2行):

file_path = "your_file.txt"
with open(file_path, "r") as f:
    lines = f.readlines()

# 处理换行符,避免拼接后出现多余换行
line1 = lines[0].strip()
line2 = lines[1].strip()
merged_line = f"{line1}, {line2}"

# 把合并后的内容写回文件(这里保留了其他行)
with open(file_path, "w") as f:
    f.write(merged_line + "\n")
    for line in lines[2:]:
        f.write(line)

问题2:高分学生姓名同行输出的问题

你的问题出在每次匹配到高分学生时都重复打印了前缀"Best Students :",用end=" "只是让打印不换行,但前缀会跟着每一次循环重复输出,这就导致了不符合预期的结果。

解决思路:

  1. 先遍历文件,收集所有分数,找到最高分;
  2. 再次遍历文件,把所有分数等于最高分的学生姓名收集到列表中;
  3. 最后一次性输出前缀+逗号分隔的姓名列表,再单独输出最高分。

修改后的完整代码:

file = "students.txt"
# 第一步:读取所有分数,找到最高分
scores = []
with open(file, "r") as f:
    for line in f:
        parts = line.strip().split()
        # 增加格式校验,避免文件内容异常导致报错
        if parts[0].isdigit():
            scores.append(int(parts[0]))
highest_score = max(scores)

# 第二步:收集所有最高分学生的姓名
top_students = []
with open(file, "r") as f:
    for line in f:
        parts = line.strip().split()
        if parts[0].isdigit() and int(parts[0]) == highest_score:
            # 拼接姓名部分(从第二个元素到最后,支持带空格的全名)
            student_name = " ".join(parts[1:])
            top_students.append(student_name)

# 第三步:按指定格式输出
print(f"Best Students : {', '.join(top_students)}")
print(f"Best mark: {highest_score}")

代码说明:

  • 先收集所有分数并找到最高分,避免在遍历过程中反复计算最大值;
  • 用列表统一存储所有高分学生姓名,避免循环中重复打印前缀;
  • 用', '.join(top_students)快速把列表转成逗号分隔的字符串,保证输出格式符合要求。

预期输出:

Best Students : Michael Murphy, John Kelly
Best mark: 89


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:26:22