我在一个列表中包含一个列表,每个列表包含3个元素,其中之一是datetime。我需要修改列表,以将日期和时间分成各自的元素,然后将它们放回列表中。
样本输入:
[[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]
所需的输出:
[[2, 13, '2019-02-02', '07:00'], [7, 8, '2019-02-02', '09:00']]
我可以使用下面的代码隔离时间或日期,但无法弄清楚如何获取两者:
from datetime import datetime
data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]
def convert_date(s):
date_object = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')
return date_object.strftime('%Y-%m-%d')
for idx,item in enumerate(data_set_x):
data_set_x[idx][-1] = convert_date(item[2])
for i in data_set_x:
sql = "insert into data (ValueA, ValueB, Date) values (%s, %s, %s)"
print(sql, i)
答案 0 :(得分:1)
from datetime import datetime
data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]
def convert_date(s):
date_object = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S')
return date_object.strftime('%Y-%m-%d'), date_object.strftime('%H:%M')
for idx,item in enumerate(data_set_x):
data_set_x[idx][-1], time = convert_date(item[2])
data_set_x[idx].append(time)
for i in data_set_x:
sql = "insert into data (ValueA, ValueB, Date, Time) values (%s, %s, %s, %s)"
print(sql, i)
答案 1 :(得分:1)
如果输入和输出预期为字符串,则无需使用datetime
,只会增加不必要的开销。
def break_date_time(s):
d, t = s.split('T')
t2 = ':'.join(t.split(':')[0:2])
return [d, t2]
data_set_y = [x[0:2] + break_date_time(x[2]) for x in data_set_x]
答案 2 :(得分:0)
您可以尝试以下方法:
import datetime
for item in data_set_x:
# remove last element
dt_str = item.pop()
# convert 'str' to 'datetime'
dt_obj = datetime.datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%S')
# append two 'str'
item.append(dt_obj.strftime('%Y-%m-%d'))
item.append(dt_obj.strftime('%H:%M'))
您可能需要调整新字符串的格式以适合您的用例。
您也可以将字符串用原始字符串中的T
字符拆分(这比创建datetime
对象要快),但是datetime
对象可能会有所帮助您想要在日期或时间上指定与原始字符串不同的格式。
答案 3 :(得分:0)
您可以进行切片分配以编辑列表:
from datetime import datetime
data_set_x = [[2, 13, '2019-02-02T07:00:00'], [7, 8, '2019-02-02T09:00:00']]
for item in data_set_x:
item_dt = datetime.strptime(item[2], '%Y-%m-%dT%H:%M:%S')
item[2:3] = [item_dt.strftime('%Y-%m-%d'), item_dt.strftime('%H:%M')]
print(data_set_x)
输出:
[[2, 13, '2019-02-02', '07:00'], [7, 8, '2019-02-02', '09:00']]