如何在Python中从字典提取日期并转为DD-MM-YYYY格式?
解决从文件名提取日期并转换格式的问题
嘿,别发愁啦!正则刚上手确实容易摸不着头脑,我来帮你一步步搞定这个需求~
分析你的需求
你的字典键都是类似Shop - Produce - 20180212.xlsx的文件名,里面的日期是8位数字的YYYYMMDD格式,我们需要把它提取出来,转换成DD-MM-YYYY格式。
正则表达式怎么写?
针对你的文件名格式,最简单有效的正则是匹配连续的8位数字:r'(\d{8})'。
\d:匹配任意数字{8}:指定正好匹配8个数字- 括号
():把这8位数字标记为捕获组,方便后续用group(1)提取出来
如果想更精准(避免文件名里其他8位数字的干扰),可以写更严格的正则:r'- (\d{8})\.xlsx',它会专门匹配- 后面、.xlsx前面的8位数字,完全贴合你的文件名结构。
完整代码示例
结合日期转换的逻辑,完整代码如下:
import re from datetime import datetime SHOPS_AND_ORDERNUM = { 'Shop - Produce - 20180212.xlsx': 1334, 'Shop - Organic - 20180223.xlsx': 8893, 'Shop - Fresh - 20180226.xlsx': 5557, 'Shop - Dairy - 20180227.xlsx': 3870 } for filename, order_num in SHOPS_AND_ORDERNUM.items(): # 用精准的正则匹配日期 match = re.search(r'- (\d{8})\.xlsx', filename) if match: # 提取捕获组里的日期字符串 raw_date = match.group(1) # 先把字符串解析为datetime对象,再格式化为DD-MM-YYYY formatted_date = datetime.strptime(raw_date, '%Y%m%d').strftime('%d-%m-%Y') # 这里可以根据你的需求处理结果,比如打印或者存储 print(f"店铺文件名: {filename} | 订单数: {order_num} | 格式化日期: {formatted_date}")
代码解释
- 正则匹配:
re.search(r'- (\d{8})\.xlsx', filename)会在每个文件名里找到符合规则的日期部分,返回匹配对象。 - 提取日期:
match.group(1)获取捕获组里的8位日期字符串(比如20180212)。 - 格式转换:
datetime.strptime(raw_date, '%Y%m%d'):把字符串按YYYYMMDD格式解析成datetime对象。.strftime('%d-%m-%Y'):把datetime对象转换成DD-MM-YYYY格式的字符串(比如12-02-2018)。
运行这段代码,你就能得到每个文件对应的格式化日期啦!
内容的提问来源于stack exchange,提问作者Hana
相关产品推荐
相关产品推荐

