求助:编写Python脚本提取特定格式TXT文件名日期并排序
提取文件名中的日期并排序文件列表
没问题,我来帮你搞定这个正则和排序的部分!你的文件名格式虽然有三种变体,但日期部分的格式是完全固定的——都是yyyy-mm-dd-hh-mm-ss,而且都在文件名的末尾(.txt扩展名之前),这就好办了。
方法1:用字符串分割(不用正则,简单直接)
既然日期总是最后一个下划线后面的内容,我们可以直接通过字符串操作提取,不用正则也能搞定:
import os # 先筛选出所有txt文件 list_files = [file for file in os.listdir() if file.endswith(".txt")] # 定义提取日期的函数,作为排序依据 def get_date_from_filename(filename): # 分割文件名,取最后一个下划线后面的部分,再去掉.txt扩展名 date_str = filename.split("_")[-1].replace(".txt", "") return date_str # 按日期升序排序(想要降序就加reverse=True) sorted_files = sorted(list_files, key=get_date_from_filename) # 打印排序后的结果 for f in sorted_files: print(f)
方法2:用正则表达式(更严谨,适合复杂场景)
如果担心文件名里有其他类似日期的字符串干扰,用正则精准匹配yyyy-mm-dd-hh-mm-ss格式会更可靠:
import os import re # 筛选txt文件 list_files = [file for file in os.listdir() if file.endswith(".txt")] # 正则规则:匹配结尾的日期格式(4位年-2位月-2位日-2位时-2位分-2位秒) date_pattern = re.compile(r'(\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2})\.txt$') def get_date_from_filename(filename): match = date_pattern.search(filename) if match: return match.group(1) # 容错处理:如果文件不符合格式,返回空字符串让它排到最后 return "" # 按日期排序 sorted_files = sorted(list_files, key=get_date_from_filename) # 输出结果 for f in sorted_files: print(f)
两种方法的适用场景
- 方法1更简单高效,适合你这种文件名格式固定、日期位置明确的场景;
- 方法2更严谨,哪怕未来文件名格式有小变动,只要日期格式不变,依然能精准提取。
你可以根据自己的需求任选一种,都能完成按日期排序的目标~
内容的提问来源于stack exchange,提问作者JPV
相关产品推荐
相关产品推荐

