python - Python脚本的奇怪行为
问题描述
我必须从 python 中的字符串中提取所需格式的开始日期、开始时间和结束日期、结束时间。为此,我写了一个代码:
from datetime import *
#date_time = 'Sun Apr 22 2018 at 02:00 pm to Sun May 13 2018 at 02:00 pm'
#date_time = 'Sun Apr 22 2018 at 02:00 pm'
#date_time = 'Sat Apr 28 2018 at 05:00 pm to 07:00 am'
#date_time = 'Fri Oct 15 2021'
date_time = 'Sat Aug 01 2020'
#date_time = 'Wed Jan 22 2020 at 01:30 pm'
#date_time = 'Wed Jan 01 2020 to Thu Jan 02 2020'
delim = 'to'
if delim in date_time:
start_date_time = date_time.split(delim, 2)[0]
start_date_time = start_date_time.partition(' ')[2] #remove the first word of the string
end_date_time = date_time.split(delim, 2)[1]
end_date_time = end_date_time.strip() #remove the first space in the string
#end_date_time = end_date_time.partition(' ')[2] #remove the first word of the string
delim = 'at'
start_date = start_date_time.split(delim, 2)[0]
start_date = start_date.rstrip() #remove the space at the end of the string
start_date = datetime.strptime(start_date, "%b %d %Y")
start_time = start_date_time.split(delim, 2)[1]
start_time = start_time.strip()
start_time = datetime.strptime(start_time, "%I:%M %p")
start_time = datetime.strftime(start_time, "%H:%M:%S")
if delim in end_date_time:
end_date_time = end_date_time.partition(' ')[2] #remove the first word of the string
end_date = end_date_time.split(delim, 2)[0]
#print(end_date)
end_date = end_date.rstrip()
end_date = datetime.strptime(end_date, "%b %d %Y")
#print(end_date)
end_time = end_date_time.split(delim, 2)[1]
end_time = end_time.strip()
end_time = datetime.strptime(end_time, "%I:%M %p")
end_time = datetime.strftime(end_time, "%H:%M:%S")
else:
end_date = start_date
end_time = end_date_time
end_time = end_time.strip()
end_time = end_time.rstrip()
end_time = datetime.strptime(end_time, "%I:%M %p")
end_time = datetime.strftime(end_time, "%H:%M:%S")
else:
delim = 'at'
if delim in date_time:
start_date_time = date_time.partition(' ')[2]
#end_date_time = start_date_time
#delim = 'at'
start_date = start_date_time.split(delim, 2)[0]
start_date = start_date.rstrip()
start_date = datetime.strptime(start_date, "%b %d %Y")
start_time = start_date_time.split(delim, 2)[1]
start_time = start_time.strip()
start_time = datetime.strptime(start_time, "%I:%M %p")
start_time = datetime.strftime(start_time, "%H:%M:%S")
#end_date = end_date_time.split(delim, 2)[0]
#print(end_date)
#end_date = end_date.rstrip()
#end_date = datetime.strptime(end_date, "%b %d %Y")
#print(end_date)
end_date = start_date
end_time = ''
else:
start_date_time = date_time.partition(' ')[2]
#end_date_time = start_date_time
#start_date = start_date_time.split(delim, 2)[0]
start_date = start_date_time.rstrip()
start_date = datetime.strptime(start_date, "%b %d %Y")
start_time = ''
end_date = start_date
end_time = ''
'''delim = 'at'
start_date = start_date_time.split(delim, 2)[0]
start_date = datetime.strptime(start_date, "%b %d %Y ")
start_time = start_date_time.split(delim, 2)[1]
start_time = start_time.strip()
start_time = datetime.strptime(start_time, "%I:%M %p")
start_time = datetime.strftime(start_time, "%H:%M:%S")
end_date = end_date_time.split(delim, 2)[0]
end_date = datetime.strptime(end_date, "%b %d %Y ")
end_time = end_date_time.split(delim, 2)[1]
end_time = end_time.strip()
end_time = datetime.strptime(end_time, "%I:%M %p")
end_time = datetime.strftime(end_time, "%H:%M:%S")'''
#print(start_date_time)
print(start_date)
print(start_time)
print('-'*40)
#print(end_date_time)
print(end_date)
print(end_time)
对于date_time = 'Fri Oct 15 2021'
,它产生正确的输出为:
$ python date_time.py
2021-10-15 00:00:00
----------------------------------------
2021-10-15 00:00:00
但是对于另一个类似的字符串date_time = 'Sat Aug 01 2020'
,它会产生错误:
$ python date_time.py
Traceback (most recent call last):
File "date_time.py", line 69, in <module>
start_time = start_date_time.split(delim, 2)[1]
IndexError: list index out of range
我无法调试代码。
解决方案
推荐阅读
- c++ - 迁移到 VS2019 后出现奇怪的 LNK2001 错误
- android - Android studio 深度链接到特定应用权限设置
- python-3.x - 在没有索引的 Jupyter 中显示完整的 Pandas 数据框
- python - 从 for 循环的输出创建熊猫数据框
- python - 如果与前一行的差异高于阈值,则 Pandas 替换为 NaN
- elasticsearch - ElasticSearch 数组数据使用 AND 条件匹配嵌套元素中的多个属性
- python - 在 Python Pandas 系列中重新格式化和重新排序日期
- laravel - 避免不同语言的多条路线
- django - 补丁方法中的序列化程序不检查字段
- java - 将反射方法作为参数传递(功能接口)