如何在加载CSV原始数据文件前按文件名时间戳排序?
解决方案:按文件名时间戳排序后加载CSV
问题出在字符串排序逻辑上:文件名里的小时数如果是单数字(比如9),字符串比较时"9"会被判定为大于"10",导致同一天早生成的文件反而排在后面。我们可以通过提取时间戳并转换为可正确排序的数值,先对文件列表排序再加载。
步骤1:定义时间戳提取函数
从文件名中拆分出时间组件,转换为整数元组,确保排序逻辑符合时间顺序:
from pathlib import Path import pandas as pd def get_time_key(file_path): stem = Path(file_path).stem # 按下划线拆分文件名,提取时间部分 _, ym, day, hour, minute, second = stem.split("_") # 拆分年和月(比如202211拆为2022、11) year = int(ym[:4]) month = int(ym[4:]) # 返回整数元组,用于排序比较 return (year, month, int(day), int(hour), int(minute), int(second))
步骤2:对文件列表排序
用上面的函数作为排序依据,对文件列表进行升序排序:
# 按时间从早到晚排序文件 sorted_files = sorted(filenames, key=get_time_key)
步骤3:按排序后的顺序加载文件
遍历排序后的列表读取CSV即可:
for file in sorted_files: name_only = Path(file).stem df = pd.read_csv(file, skiprows=10, sep=";") # 这里可添加数据合并、处理等后续逻辑
补充说明
- 只要文件名格式固定为
前缀_YYYYMM_D_H_M_S,这个方法就能稳定工作;如果存在其他格式的文件,可以先通过过滤(比如判断拆分后的元素数量)筛选出目标文件再排序。 - 整数元组的比较会按年→月→日→时→分→秒的顺序依次进行,完全符合时间的自然排序逻辑,彻底解决单小时数排序异常的问题。
内容的提问来源于stack exchange,提问作者will.wo
相关产品推荐
相关产品推荐

