如何用Python按小时合并目录下YYYYMMDDHHMM命名的批量TXT文件?
解决按小时合并YYYYMMDDHHMM格式TXT文件的问题
我来帮你搞定这两个问题,咱们一步步调整代码,实现按小时合并文件并正确命名输出:
核心思路
你的文件名格式是YYYYMMDDHHMM.txt,前10位字符(YYYYMMDDHH)刚好是日期+小时的唯一标识,我们可以用这个标识来分组,把同一小时的所有文件合并到一起,输出文件名就用这个标识命名(比如2018010100.txt)。
完整代码实现
import os from itertools import groupby def concat_files_by_hour(path): # 获取目录下所有txt文件,过滤非txt文件并排序 file_list = sorted([f for f in os.listdir(path) if f.endswith('.txt')]) # 按文件名前10位(YYYYMMDDHH)分组 for hour_key, group in groupby(file_list, key=lambda x: x[:10]): # 输出文件名:小时标识 + .txt output_filename = os.path.join(path, f"{hour_key}.txt") # 打开输出文件,写入所有同小时的文件内容 with open(output_filename, "w") as outfile: for filename in group: # 拼接完整文件路径,避免找不到文件 full_path = os.path.join(path, filename) with open(full_path, "r") as infile: outfile.write(infile.read()) # 可选:如果需要在文件之间加分隔符,比如换行 # outfile.write("\n") print(f"已合并小时 {hour_key} 的文件到 {output_filename}") # 调用示例,替换成你的目录路径 concat_files_by_hour("/path/to/your/files")
代码解释
- 过滤与排序:先筛选出
.txt文件并排序,确保文件按时间顺序排列,这样groupby才能正确把同一小时的文件分到一组(groupby要求相同key的元素连续)。 - 分组逻辑:用
groupby按文件名前10位分组,这个key就是我们的小时标识(比如2018010100)。 - 输出文件命名:直接用小时标识作为输出文件名,比如
2018010100.txt,这样不会覆盖文件,每个小时对应一个独立文件。 - 路径处理:用
os.path.join拼接目录路径和文件名,避免因当前工作目录不同导致的文件找不到问题。
额外优化建议
- 如果需要保留原文件的换行分隔,可以在写入每个文件内容后加
outfile.write("\n"),避免两个文件的内容连在一起。 - 如果某个小时的文件数量不是60个(比如缺失了某些分钟的文件),代码依然能正常合并该小时的所有现有文件。
内容的提问来源于stack exchange,提问作者Mik
相关产品推荐
相关产品推荐

