求助:如何读取CSV文件第一、第六行十进制数转HH.MM并统计总时长
解决CSV时间转换与总时长统计问题
别慌,我来一步步帮你理清思路并完成代码!咱们把这个任务拆成三个核心步骤,逐个击破:
步骤1:读取CSV目标行的十进制数值
首先要注意,Python里的行索引是从0开始的,所以你说的「第一行」对应索引0,「第六行」对应索引5。我们可以用标准库的csv模块来读取文件,精准提取这两行的数值:
import csv # 定义要提取的行索引(对应实际第1、6行) target_row_indices = [0, 5] decimal_times = [] # 打开CSV文件读取 with open("your_data.csv", "r") as csv_file: reader = csv.reader(csv_file) for row_num, row in enumerate(reader): if row_num in target_row_indices: try: # 假设每行第一个元素是目标十进制数,根据你的实际情况修改索引 time_val = float(row[0]) decimal_times.append(time_val) except ValueError: print(f"警告:第{row_num+1}行的内容无法转换为十进制数")
步骤2:将十进制数转换为HH.MM格式
十进制数的整数部分是小时,小数部分乘以60就是分钟(注意处理四舍五入和分钟满60的情况):
def decimal_to_hhmm(decimal_time): # 提取整数部分作为小时 hours = int(decimal_time) # 计算分钟:小数部分*60后取整 minutes = round((decimal_time - hours) * 60) # 处理分钟刚好等于60的特殊情况,转成1小时0分 if minutes == 60: hours += 1 minutes = 0 return hours, minutes # 转换所有提取到的时间 time_pairs = [decimal_to_hhmm(t) for t in decimal_times]
步骤3:统计总时长并输出
把两个时间的小时和分钟分别累加,再处理分钟进位的问题:
# 计算总小时和总分钟 total_hours = sum(h for h, m in time_pairs) total_minutes = sum(m for h, m in time_pairs) # 处理分钟进位:超过60的部分转为小时 total_hours += total_minutes // 60 total_minutes = total_minutes % 60 # 输出结果,这里用HH.MM格式,也可以改成HH:MM print(f"统计总时长:{total_hours}.{total_minutes:02d}")
可选简化方案:用Pandas快速实现
如果你熟悉Pandas,代码会更简洁:
import pandas as pd # 读取CSV,不设置表头 df = pd.read_csv("your_data.csv", header=None) # 提取第1、6行的第0列数据并转为浮点数 decimal_times = df.iloc[[0, 5], 0].astype(float).tolist() # 后续的转换和统计逻辑和上面一致
注意事项
- 如果你CSV里的目标数值不在第1列(索引0),记得把
row[0]或者iloc里的列索引改成实际位置 - 如果需要严格取整而不是四舍五入,把
round()换成int()即可
内容的提问来源于stack exchange,提问作者Gary Harrison
相关产品推荐
相关产品推荐

