嵌套循环不会将字符串转换为datetime.date对象或中途退出

时间:2018-07-17 17:39:15

标签: python dictionary sqlalchemy

我有一个称为measures的词典列表,其中每个词典都包含带有字符串格式日期值的日期键:

measures =

[{'date': '2010-01-01', 'prcp': 0.15142857142857144, 'tobs': 
69.71428571428571}, {'date': '2010-01-02', 'prcp': 0.002857142857142857, 
'tobs': 67.0}, {'date': '2010-01-03', 'prcp': 0.0, 'tobs': 74.0}, {'date': 
'2010-01-04', 'prcp': 0.0014285714285714286, 'tobs': 75.0}, {'date': '2010- 
01-05', 'prcp': 0.005, 'tobs': 74.5}]

我想将日期字符串转换为datetime.date对象,因为我需要sqlalchemy的确切格式。我不希望使用datetime.datetime格式,但我肯定当前的格式是字符串格式。当我使用以下嵌套循环时:

for record in measures:
    for key, val in record.items():
        record['date']=datetime.strptime(record['date'],'%Y-%m-%d').date()
        print(type(record['date']))    

我收到错误:TypeError:strptime()参数1必须是str,而不是datetime.date 但是注释掉转换代码并在运行转换后检查每个日期记录的类型,我发现有4条记录被转换为datetime.date,但此后退出:

for record in measures:
    for key, val in record.items():
        ##record['date']=datetime.strptime(record['date'],'%Y-%m-%d').date()
        print(type(record['date']))

Output:
<class 'datetime.date'>
<class 'datetime.date'>
<class 'datetime.date'>
<class 'str'>
<class 'str'>   

有什么主意我可以解决这个问题吗?我的原始字典中有20000个项目。

2 个答案:

答案 0 :(得分:2)

您的代码应为:

for record in measures:
    record['date']=datetime.strptime(record['date'],'%Y-%m-%d').date()
    print(type(record['date']))

答案 1 :(得分:2)

IIUC,您也可以使用dateutil.parser

from dateutil import parser
for item in measures:
    item['date'] = parser.parse(item['date']).date( )

[{'date': datetime.date(2010, 1, 1),
  'prcp': 0.15142857142857144,
  'tobs': 69.71428571428571},
 {'date': datetime.date(2010, 1, 2),
  'prcp': 0.002857142857142857,
  'tobs': 67.0},
 {'date': datetime.date(2010, 1, 3), 
  'prcp': 0.0, 
  'tobs': 74.0},
 {'date': datetime.date(2010, 1, 4),
  'prcp': 0.0014285714285714286,
  'tobs': 75.0},
 {'date': datetime.date(2010, 1, 5), 
  'prcp': 0.005, 
  'tobs': 74.5}]