Python 按小时和分钟对数据进行子集化,忽略日期
Python subsetting data by hour and minute, ignoring date
我有一个图像时间戳列表,格式为“20121002_1639”(“%Y%m%d_%H%M”)
我想创建一个函数,它接受这些时间戳的列表并排除在两者之间拍摄的图像
1500(下午 3:00)和 1700(下午 5:00)。但是,当我尝试只解析字符串的 %H%M 部分时,它会自动将这些日期时间分配给日期 19000101_1500 和 19000101_1700。所以我需要创建仅包含小时和分钟但与日期无关的对象。
伪代码应该是这样的:
import datetime as dt
# example datetime string
datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']
Start_time = dt.datetime.strptime('1500', '%H%M')
End_time = dt.datetime.strptime('1700', '%H%M')
good_times = []
for time in datestrings:
if dt.datetime.strptime(time[9:13], '%H%M') is between(Start_time, End_time):
continue
else:
good_times.append(time)
您只能使用 datetime
对象的时间部分,为此请使用 .time()
方法。所以你不需要只解析给定字符串的一部分,解析所有然后把它也 time part
datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']
Start_time = dt.datetime.strptime('1500', '%H%M').time()
End_time = dt.datetime.strptime('1700', '%H%M').time()
good_times = []
for time in datestrings:
if not (Start_time <= dt.datetime.strptime(time, '%Y%m%d_%H%M').time() < End_time):
good_times.append(time)
print(good_times) # ['20111101_1229', '20170328_1100']
事实上,您甚至可以通过基本的 int
比较来做到这一点
Start_time = 1500
End_time = 1700
for time in datestrings:
if not (Start_time <= int(time.split("_")[-1]) < End_time):
good_times.append(time)
我有一个图像时间戳列表,格式为“20121002_1639”(“%Y%m%d_%H%M”)
我想创建一个函数,它接受这些时间戳的列表并排除在两者之间拍摄的图像 1500(下午 3:00)和 1700(下午 5:00)。但是,当我尝试只解析字符串的 %H%M 部分时,它会自动将这些日期时间分配给日期 19000101_1500 和 19000101_1700。所以我需要创建仅包含小时和分钟但与日期无关的对象。
伪代码应该是这样的:
import datetime as dt
# example datetime string
datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']
Start_time = dt.datetime.strptime('1500', '%H%M')
End_time = dt.datetime.strptime('1700', '%H%M')
good_times = []
for time in datestrings:
if dt.datetime.strptime(time[9:13], '%H%M') is between(Start_time, End_time):
continue
else:
good_times.append(time)
您只能使用 datetime
对象的时间部分,为此请使用 .time()
方法。所以你不需要只解析给定字符串的一部分,解析所有然后把它也 time part
datestrings = ['20121002_1639', '20111101_1229', '20160424_1502', '20170328_1100']
Start_time = dt.datetime.strptime('1500', '%H%M').time()
End_time = dt.datetime.strptime('1700', '%H%M').time()
good_times = []
for time in datestrings:
if not (Start_time <= dt.datetime.strptime(time, '%Y%m%d_%H%M').time() < End_time):
good_times.append(time)
print(good_times) # ['20111101_1229', '20170328_1100']
事实上,您甚至可以通过基本的 int
比较来做到这一点
Start_time = 1500
End_time = 1700
for time in datestrings:
if not (Start_time <= int(time.split("_")[-1]) < End_time):
good_times.append(time)