如何按创建日期筛选txt文件并将同日txt文件打包为Zip
按文件创建日期分组打包TXT文件的实现方案
核心实现分三个核心环节,主流编程语言都可以按这个逻辑落地,无特殊依赖:
- 筛选目标范围的TXT文件
遍历指定的目标文件夹,过滤后缀为.txt的文件,可根据需求选择是否递归遍历子文件夹,跳过目录、快捷方式、其他后缀的非目标文件。 - 读取创建时间并按自然日分组
注意不同操作系统的文件时间字段差异,避免取错时间:Windows系统直接读取文件属性中的
CreationTime即可;Linux/macOS系统不要误用st_ctime字段——这个字段记录的是文件元数据最后变更时间,不是创建时间,需要读取文件的birth time(创建/出生时间)字段;如果是老版本ext3等不支持记录创建时间的文件系统,可以降级取文件最早的修改时间做兜底。
拿到每个文件的创建时间戳后,统一转换为YYYY-MM-DD格式的自然日字符串作为分组标识,把同日期的文件路径归集到同一分组下。 - 按分组生成Zip压缩包
遍历所有日期分组,以对应日期命名压缩包(例如2024-06-15_txt_bundle.zip),将分组内的所有TXT文件写入压缩包即可,写入时可以选择保留原目录结构,也可以直接将文件放在压缩包根目录简化后续解压使用。
可直接运行的参考实现(Python)
import zipfile from datetime import datetime from pathlib import Path def pack_txt_by_create_date(target_dir: str, output_dir: str = None, recursive_scan: bool = False): target_path = Path(target_dir).resolve() if not target_path.is_dir(): raise Exception("目标路径不是有效文件夹") # 压缩包默认存到目标文件夹下,也可自定义输出路径 save_path = Path(output_dir).resolve() if output_dir else target_path save_path.mkdir(exist_ok=True) date_file_map = {} # 匹配所有txt文件 scan_rule = "**/*.txt" if recursive_scan else "*.txt" for txt_file in target_path.glob(scan_rule): if not txt_file.is_file(): continue # 跨系统读取创建时间 file_stat = txt_file.stat() create_timestamp = getattr(file_stat, "st_birthtime", file_stat.st_ctime) date_key = datetime.fromtimestamp(create_timestamp).strftime("%Y-%m-%d") date_file_map.setdefault(date_key, []).append(txt_file) # 逐个生成压缩包 for date_key, files in date_file_map.items(): zip_file_path = save_path / f"{date_key}_txt_files.zip" with zipfile.ZipFile(zip_file_path, "w", zipfile.ZIP_DEFLATED) as zf: for f in files: # 压缩包内保留原文件名,不嵌套冗余路径 zf.write(f, arcname=f.name) # 调用示例:替换为实际目标文件夹路径即可 if __name__ == "__main__": pack_txt_by_create_date("/your/target/folder/path")
内容的提问来源于stack exchange,提问作者João Bastardo
相关产品推荐
相关产品推荐

