专栏导读


-
🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
-
-
-
-
📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅
-
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
-
❤️ 欢迎各位佬关注! ❤️
1、背景
-
我们有时候需要从文件名中提取时间,以便用某些唯一字段进行匹配,在匹配的时候,可以匹配到对应时间点的数据,所以这时候我们需要利用Python+re正则表达式提取出文件名中包含的时间,且能够自动添加这天的开始时间以及结束时间.
2、库的安装
3、核心代码
pattern = r"(\d{4}-\d{2}-\d{2}(?:-\d{2}-\d{2}-\d{2})?)_(\d{4}-\d{2}-\d{2}(?:-\d{2}-\d{2}-\d{2})?)|(\d{4}-\d{2}-\d{2})"
start_time = datetime.strptime(start_time_str, "%Y-%m-%d-%H-%M-%S")
end_time = datetime.strptime(end_time_str, "%Y-%m-%d-%H-%M-%S")
4、完整代码
'''
@Project :测试
@File :测试.py
@IDE :PyCharm
@Author :小庄(278865463@qq.com)
@Date :2024/10/22 11:06
'''
import os
import re
from datetime import datetime
files = [
"报价数据/xx报价/隔日达/xx_隔日达_2024-06-20_2024-07-09.xlsx",
"报价数据/xx报价/隔日达/xx_隔日达_2024-08-30_2024-09-01.xlsx",
"报价数据/xx报价/隔日达/xx_隔日达_2024-09-02-00-00-00_2024-09-02-13-30-59.xlsx",
"报价数据/xx报价/隔日达/xx_隔日达_2024-09-02-13-31-00_2024-09-02-23-59-59.xlsx",
"报价数据/xx报价/隔日达/xx_隔日达_2024-09-03.xlsx"
]
def extract_time_range(file_name):
pattern = r"(\d{4}-\d{2}-\d{2}(?:-\d{2}-\d{2}-\d{2})?)_(\d{4}-\d{2}-\d{2}(?:-\d{2}-\d{2}-\d{2})?)|(\d{4}-\d{2}-\d{2})"
match = re.search(pattern, file_name)
if match:
if match.group(3):
date_str = match.group(3)
start_time = datetime.strptime(date_str, "%Y-%m-%d")
end_time = start_time
return start_time.replace(hour=0, minute=0, second=0), end_time.replace(hour=23, minute=59, second=59)
else:
start_time_str, end_time_str = match.groups()[:2]
if len(start_time_str) == 10:
start_time_str += "-00-00-00"
if len(end_time_str) == 10:
end_time_str += "-23-59-59"
start_time = datetime.strptime(start_time_str, "%Y-%m-%d-%H-%M-%S")
end_time = datetime.strptime(end_time_str, "%Y-%m-%d-%H-%M-%S")
return start_time, end_time
return None, None
def format_time_range(start_time, end_time):
start_formatted = start_time.strftime("%Y-%m-%d %H:%M:%S")
end_formatted = end_time.strftime("%Y-%m-%d %H:%M:%S")
return f"{start_formatted} 至 {end_formatted}"
for idx, file in enumerate(files, 1):
start_time, end_time = extract_time_range(file)
if start_time and end_time:
print(f"{idx}: {format_time_range(start_time, end_time)}")
else:
print(f"{idx}: 无法提取时间范围")
1: 2024-06-20 00:00:00 至 2024-07-09 23:59:59
2: 2024-08-30 00:00:00 至 2024-09-01 23:59:59
3: 2024-09-02 00:00:00 至 2024-09-02 13:30:59
4: 2024-09-02 13:31:00 至 2024-09-02 23:59:59
5: 2024-09-03 00:00:00 至 2024-09-03 23:59:59
更多关于时间处理的文章
总结
-
希望对初学者有帮助
-
致力于办公自动化的小小程序员一枚
-
希望能得到大家的【一个免费关注】!感谢
-
求个 🤞 关注 🤞
-
-
求个 ❤️ 喜欢 ❤️
-
-
求个 👍 收藏 👍
-