Python读取FitBit数据文件并转换时间为午夜后分钟数求助
问题分析
你的代码已经完成文件读取、注释过滤和数据拆分,但minutes_since_midnight函数未正确实现时间到午夜后分钟数的转换逻辑——它仅遍历数据却未对时间字符串做解析计算,也未返回处理结果。我们需要重构时间转换逻辑,将HH.MMAM/PM格式的时间转为午夜后分钟数,最终生成(开始分钟, 结束分钟, 步数)的元组列表。
修正后的完整代码
import sys def parse_time_to_minutes(time_str): # 拆分时间数字部分与AM/PM时段标识 time_part, period = time_str[:-2], time_str[-2:] # 拆分小时和分钟并转为整数 hours, minutes = map(int, time_part.split(".")) # 处理12小时制转24小时制的特殊情况 if period == "AM": hours = 0 if hours == 12 else hours else: hours = hours if hours == 12 else hours + 12 # 计算午夜后总分钟数 return hours * 60 + minutes def process_fitbit_data(file_path): processed_data = [] with open(file_path, "r") as f: for line in map(str.strip, f): # 跳过空行和注释行 if not line or line.startswith("#"): continue # 拆分每行的时间和步数数据 start_time, end_time, steps = line.split(":") # 转换时间为分钟数,步数转为整数 start_min = parse_time_to_minutes(start_time) end_min = parse_time_to_minutes(end_time) # 存入元组 processed_data.append((start_min, end_min, int(steps))) return processed_data if __name__ == "__main__": if len(sys.argv) < 2: print("请传入数据文件路径作为命令行参数") sys.exit(1) result = process_fitbit_data(sys.argv[1]) print(result)
关键说明
时间解析函数
parse_time_to_minutes:- 拆分时间字符串的数字部分和时段标识,处理12小时制到24小时制的转换(如12AM转为0点,3PM转为15点)
- 通过
小时*60 + 分钟计算出午夜后的总分钟数
数据处理流程优化:
- 读取文件时直接过滤无效行,拆分数据后同步完成时间转换和类型转换
- 直接生成目标格式的元组,无需额外的列表转元组步骤
- 修复原代码硬编码文件名的问题,改用命令行传入的参数
测试输出:
针对你提供的原始数据,运行代码后会输出:[(570, 585, 220), (705, 743, 300), (705, 623, 302), (1665, 1703, 202), (1845, 1853, 90), (2085, 2093, 80), (2205, 2243, 1000), (3285, 3293, 102)]
内容的提问来源于stack exchange,提问作者user159
相关产品推荐
相关产品推荐

