通过替换Python中的隐藏数字来查找最新有效时间的程序
在处理数据时,我们经常会遇到需要提取日期时间的情况。但是有时候日期时间并不是以标准的格式出现,比如可能出现以下情况:
2022-05-__ 12:30:002022-__-01 09:45:0020__-04-19 20:00:00
这些日期时间中,有些数字被隐藏了,我们无法直接提取。那么如何找到最近的有效时间呢?
更多Python相关文章,请阅读:Python 教程
第一步:生成虚拟数据
我们先生成一些虚拟数据来模拟这种情况。
import random
# 生成随机日期时间,将其中某些数字替换为“__”
def generate_data():
year = random.choice(range(2020, 2024))
month = random.choice(range(1, 13))
day = random.choice(range(1, 32))
hour = random.choice(range(0, 24))
minute = random.choice(range(0, 60))
second = random.choice(range(0, 60))
pattern = "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}"
format_str = pattern.format(year, month, day, hour, minute, second)
# 随机将2个数字替换为“__”
index1 = random.choice(range(0, 10))
index2 = random.choice(range(0, 10))
while index2 == index1:
index2 = random.choice(range(0, 10))
format_str = format_str[:index1] + "__" + format_str[index1+2:index2] + "__" + format_str[index2+2:]
return format_str
# 生成100个虚拟数据
data = []
for i in range(100):
data.append(generate_data())
生成的数据示例:
[
'2022-__-01 09:45:00',
'20__-04-19 20:00:00',
'2021-__-19 09:58:03',
'20__-08-07 00:39:10',
'20__-08-17 04:03:50',
'2022-05-__ 12:30:00',
'2020-09-__ 18:48:02',
'2023-__-28 22:19:06',
...
]
第二步:将隐藏数字替换为0-9
我们可以将所有的“__”依次替换为0-9,生成一系列时间值,判断哪一个是最近的有效时间。
from datetime import datetime, timedelta
# 替换“__”为0-9生成时间值
def generate_time_list(format_str):
time_list = []
for i in range(0, 10):
for j in range(0, 10):
time_str = format_str.replace("__", str(i)).replace("__", str(j))
try:
time_value = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
time_list.append(time_value)
except ValueError:
pass
return time_list
# 找到最近的有效时间
def find_latest_time(format_str):
time_list = generate_time_list(format_str)
now = datetime.now()
latest_diff = timedelta.max
latest_time = None
for time_value in time_list:
diff = now - time_value
if diff.days >= 0 and diff < latest_diff:
latest_diff = diff
latest_time = time_value
return latest_time
# 遍历虚拟数据,找到最近的有效时间
for format_str in data:
latest_time = find_latest_time(format_str)
print("original: ", format_str)
print("latest: ", latest_time)
其中,generate_time_list函数将时间字符串中的“__”依次替换为0-9,并转换为datetime类型。find_latest_time函数遍历生成的时间列表,从中找到最近的有效时间。
输出结果示例:
original: 2022-__-01 09:45:00
latest: 2022-05-01 09:45:00
original: 20__-04-19 20:00:00
latest: 2020-04-19 20:00:00
original: 2021-__-19 09:58:03
latest: 2021-01-19 09:58:03
original: 20__-08-07 00:39:10
latest: 2020-08-07 00:39:10
original: 20__-08-17 04:03:50
latest: 2020-08-17 04:03:50
original: 2022-05-__ 12:30:00
latest: 2022-05-05 12:30:00
original: 2020-09-__ 18:48:02
latest: 2020-09-02 18:48:02
original: 2023-__-28 22:19:06
latest: 2023-03-28 22:19:06
可以看到,程序可以正确地找到最近的有效时间。
结论
通过替换Python中的隐藏数字来查找最新有效时间的程序,可以帮助我们处理一些日期时间格式不规范的数据。我们可以将隐藏数字依次替换为0-9,生成一系列时间值,并找到其中最近的有效时间。
极客笔记