我是一个蟒蛇初学者并且遇到了问题。尝试提取API信息并将提取的JSON时间对象转换为Python中的datetime对象,这样我最终可以在其上运行date.weekday()函数(总体目标是从API中提取所有日期并查看输出按天 - 我计划在提取所有日期后填充空字典。
出于某种原因,即使我的条件陈述,我仍然打印(2015,04,06)所有的零。那是我的问题。
我有一种感觉我得到了一些基本错误,并且还有一种更好的方法来解决这个问题,而不是在日期对象中使用0-padding进行所有ifs / elses。
到目前为止,这是我的代码:
from datetime import date
import datetime
import json
import requests
r = requests.get('https://api.github.com/repos/mbostock/d3/commits?since=2015-04-12330:00:000')
jsonoutput = r.json()
modified = (jsonoutput[0]["commit"]["author"]["date"])
#at this point, modified gives something like: "2015-04-06T22:28:16Z"
if modified[5] == 0:
if modified[8] == 0:
new_format = ("(" + modified[0:4] + ", " + modified[6] + ", " + modified[9] + ")")
#with the particular jsonoutput[0] pulled here, this one should be triggered
else:
new_format = ("(" + modified[0:4] + ", " + modified[6] + ", " + modified[8:10] + ")")
else:
if modified[8] == 0:
new_format = ("(" + modified[0:4] + ", " + modified[5:7] + ", " + modified[9] + ")")
else:
new_format = ("(" + modified[0:4] + ", " + modified[5:7] + ", " + modified[8:10] + ")")
print(new_format)
print(date.weekday(datetime.date(new_format)))
答案 0 :(得分:2)
错误发生在当前代码中,因为new_format被定义为字符串,而datetime.date
将参数作为整数。此外,由于您将字符串"0"
与数字0
进行比较,因此根本不会创建修改后的内容。
而不是:
new_format = ("(" + modified[0:4] + ", " + modified[6] + ", " + modified[8:10]) + ")")
这样做:
new_format = (int(modified[0:4]), int(modified[5:7]), int(modified[8:10]))
以上内容适用于您的所有案例,因此您也可以删除错综复杂的if
- else
块。
或者,您可以将此调整后的字符串拆分为"T"
,然后使用"-"
的另一个拆分来获取整数值:
new_format = map(int, modified.split("T")[0].split("-"))
作为参数传递时,您还需要解压缩列表,因此您的完整代码将变为:
import json
import requests
from datetime import date
r = requests.get('https://api.github.com/repos/mbostock/d3/commits?since=2015-04-12330:00:000')
jsonoutput = r.json()
modified = jsonoutput[0]["commit"]["author"]["date"]
new_format = (int(modified[0:4]), int(modified[5:7]), int(modified[8:10]))
print(date.weekday(date(*new_format)))
另外,正如其他人已经在他们的回答中指出的那样,dateutil.parser.parse
可能比编写自己的解析逻辑更好。 (dateutil不是内置包,你必须安装它):)
答案 1 :(得分:0)
从json获得的内容实际上是ISO格式的日期时间表示
您可以参考此SO答案https://stackoverflow.com/a/15228038/58129来转换字符串
答案 2 :(得分:0)
你正试图在Python有自己的解析函数。
from dateutil import parser
from datetime import date
my_date = dateutil.parser.parse(modified)
is_week_day = date.weekday(my_date)
如果您的计算机上未安装dateutil
,请尝试pip install python-dateutil
但是,如果你想使用Python的标准库:
from datetime import date, datetime
from time import strptime
mytime = strptime(modified, '%Y-%m-%dT%H:%M:%SZ')
my_date = datetime(*my_time[:6])
is_week_day = date.weekday(my_date)