如何用Python脚本按最新时间排序文本文件内容?
问题分析与解决方案
现有代码的核心问题
你的代码把所有文本拆成独立单词后排序,完全丢失了名称-数值-时间的关联关系,最终输出只是一堆无序的数值拼接,和预期的表格结构完全不匹配。
正确实现思路与代码
要实现按最新时间排序的表格输出,需要先结构化存储数据,再按需求重组:
实现步骤
- 解析每行数据,提取
名称、数值、时间三个字段 - 收集所有唯一时间,按从新到旧排序(HH:MM格式的时间字符串可直接按字典序比较)
- 建立每个名称对应各时间的数值映射表
- 格式化输出对齐的表格
完整代码
def sort_data(filename): # 存储结构化数据:{名称: {时间: 数值}} data = {} # 收集所有时间 times = set() with open(filename, 'r') as infile: for line in infile: # 去除首尾空白后拆分字段 parts = line.strip().split() if len(parts) != 3: continue # 跳过无效行 name, value, time = parts times.add(time) # 初始化名称对应的字典 if name not in data: data[name] = {} data[name][time] = value # 时间按从新到旧排序 sorted_times = sorted(times, reverse=True) # 保持名称的原始出现顺序 sorted_names = list(data.keys()) # 写入结果文件 with open("result.txt", 'w') as outfile: # 写入表头 header = f"{'Name':<12}" + ''.join(f"{t:<12}" for t in sorted_times) outfile.write(header + '\n') # 写入每行数据 for name in sorted_names: line = f"{name:<12}" for time in sorted_times: line += f"{data[name].get(time, ''):<12}" outfile.write(line + '\n') sort_data("myfile.txt")
代码说明
- 使用
with语句自动管理文件打开/关闭,避免资源泄漏 - 用嵌套字典存储
名称-时间-数值的关联关系,保证数据结构清晰 - 对时间进行逆序排序,实现"最新时间在前"的需求
- 用
<12格式化字符串,保证每列宽度一致,输出对齐的表格
输出效果
运行后result.txt的内容将和你预期的格式完全一致:
Name 06:18 06:11 05:58 ABC1234 -2.248 -2.348 -2.385 1234DCE -4.622 -3.427 -3.430 98ACD12 13.356 11.883 12.574 18DDD12 10.915 10.883 11.564 453FGH2A 0.00 0.176 0.351 A2DA21 -0.162 0.162 0.00 8FF3EFA -0.638 0.888 -0.720
内容的提问来源于stack exchange,提问作者DarCoy
相关产品推荐
相关产品推荐

