Python time.strTime Get-TypeError:函数最多接受8个参数(给定9个)

Python time.strTime Get-TypeError:函数最多接受8个参数(给定9个),python,datetime,strptime,Python,Datetime,Strptime,我测试了time.strtime();它的工作原理是: In [2]: time.strptime(u'1994-03-30T00:00:00.000Z','%Y-%m-%dT%H:%M:%S.%fZ') Out[2]: time.struct_time(tm_year=1994, tm_mon=3, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=89, tm_isdst=-1) 但是得到: TypeError: f

我测试了time.strtime();它的工作原理是:

In [2]: time.strptime(u'1994-03-30T00:00:00.000Z','%Y-%m-%dT%H:%M:%S.%fZ')
Out[2]: time.struct_time(tm_year=1994, tm_mon=3, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=89, tm_isdst=-1)
但是得到:

TypeError: function takes at most 8 arguments (9 given)
对于以下代码:

import datetime
import time

data = [{u'volume': 249675300.0, u'date': u'1994-03-31T00:00:00.000Z'}, \
        {u'volume': 202356800.0, u'date': u'1994-03-30T00:00:00.000Z'}]   

map(lambda x:datetime.datetime(*time.strptime(x['date'],'%Y-%m-%dT%H:%M:%S.%fZ')), data )
print data
我希望用
datetime
对象替换所有日期字符串,保留其余部分:

[{u'volume': 249675300.0, u'date': datetime.datetime(1994, 3, 31, 0, 0)}, 
 {u'volume': 202356800.0, u'date': datetime.datetime(1994, 3, 30, 0, 0)}]
datetime.datetime()
不接受
wday
yday
是dst
参数;您必须将时间元组切片到前6个元素

您不需要在此处使用
time.strtime()
,只需使用
datetime.datetime.strtime()

另见:

datetime.strtime(日期字符串,格式)
相当于
datetime(*(time.strtime(日期字符串,格式)[0:6])

演示:

并使用您的示例输入:

>>> data = [{u'volume': 249675300.0, u'date': u'1994-03-31T00:00:00.000Z'},
...         {u'volume': 202356800.0, u'date': u'1994-03-30T00:00:00.000Z'}]
>>> map(lambda x: datetime.datetime.strptime(x['date'], '%Y-%m-%dT%H:%M:%S.%fZ'), data)
[datetime.datetime(1994, 3, 31, 0, 0), datetime.datetime(1994, 3, 30, 0, 0)]
如果要保留词典的其余部分,请从
map()
函数返回一个新词典,并替换
'date'
键:

map(lambda x: dict(x, date=datetime.datetime.strptime(x['date'], '%Y-%m-%dT%H:%M:%S.%fZ')), data)
这将产生:

[{u'volume': 249675300.0, u'date': datetime.datetime(1994, 3, 31, 0, 0)}, {u'volume': 202356800.0, u'date': datetime.datetime(1994, 3, 30, 0, 0)}]

根据Martijn Pieters的回答

import datetime

data = [{u'volume': 249675300.0, u'date': u'1994-03-31T00:00:00.000Z'},\
    {u'volume': 202356800.0, u'date': u'1994-03-30T00:00:00.000Z'}]

def transdate(dict_):
    dict_['date'] = datetime.datetime.strptime(dict_['date'], '%Y-%m-%dT%H:%M:%S.%fZ')
    return dict_

data = map(trans, data)
print data

嗯,这并不是我想要的,事实上我想把[{…u'date':u'1994-03-31T00:00:00.000Z'}]转换成[{…u'date':datetime.datetime(1994,3,21,0,0)…]),因为我可以按日期类型字段将其插入mongodb。@G.W:对不起,什么?我正是这么做的。那你想转换成什么?您没有说明任何预期的输出。你的问题是为什么会出错,我解释了这一点,并展示了一种更好的方法来解析时间字符串到
datetime
对象。事实上,我想将[{…u'date':u'1994-03-31T00:00:00.000Z'}]转换为[{…u'date':datetime.datetime(1994,3,21,0,0)…],因为我可以按日期类型字段将其插入mongodb。@G.W.:对,所以你想保留字典的其余部分。没错!我想保留剩下的。
[{u'volume': 249675300.0, u'date': datetime.datetime(1994, 3, 31, 0, 0)}, {u'volume': 202356800.0, u'date': datetime.datetime(1994, 3, 30, 0, 0)}]
import datetime

data = [{u'volume': 249675300.0, u'date': u'1994-03-31T00:00:00.000Z'},\
    {u'volume': 202356800.0, u'date': u'1994-03-30T00:00:00.000Z'}]

def transdate(dict_):
    dict_['date'] = datetime.datetime.strptime(dict_['date'], '%Y-%m-%dT%H:%M:%S.%fZ')
    return dict_

data = map(trans, data)
print data