Python:如何更改“的所有实例”;时间戳;在.JSON文件中添加到日期时间对象
我有一个LocationHistory.json文件,其中存储了位置数据。数据如下所示:Python:如何更改“的所有实例”;时间戳;在.JSON文件中添加到日期时间对象,json,python-2.7,datetime,timestamp,Json,Python 2.7,Datetime,Timestamp,我有一个LocationHistory.json文件,其中存储了位置数据。数据如下所示: { "data" : { "items" : [ { "kind" : "latitude#location", "timestampMs" : "1374870896803", "latitude" : 34.9482949, "longitude" : -85.3245474, "accuracy" : 2149 }, { "ki
{
"data" : {
"items" : [ {
"kind" : "latitude#location",
"timestampMs" : "1374870896803",
"latitude" : 34.9482949,
"longitude" : -85.3245474,
"accuracy" : 2149
}, {
"kind" : "latitude#location",
"timestampMs" : "1374870711762",
"latitude" : 34.9857898,
"longitude" : -85.3526902,
"accuracy" : 2016"
}]
}
}
文件中几乎有一千个这样的例子,我试图简化这个想法。
然后,我通过以下代码读取数据:
json_file = open('LocationHistory.json')
json_string = json_file.read()
json_data = json.loads(json_string)
locations = json_data["data"]["items"]
现在,我想将所有出现的“timestamms”更改为日期时间对象。通过回答stackoverflow的问题,我发现以下代码可以帮助我做到这一点:
datetime.datetime.fromtimestamp(
int("timestampMs")
).strftime('%Y-%m-%d %H:%M:%S')
也是这样:
dateObject = datetime.fromtimestap(timestampMs / 1000)
otherFormat = dateObject.strftime("%Y-%m-%dT%H:%M:%SZ")
我的问题是我不熟悉JSON,我不知道如何循环或迭代LocationHistory.JSON文件中出现的所有“timestampsMs”,并将所有“timestampsMs”从1374870896803更改为2014-09-03
我试过:
for location in locations:
print(datetime.datetime.fromtimestamp(
int("timestampMs")
).strftime("%Y-%m-%dT%H:%M:%SZ")
)
(当我尝试运行它时,会出现无效的语法错误)
感谢您要从位置字典中提取数据,您可以使用get方法,然后将整数除以1000,以获得时间戳(不含毫秒):
for location in locations:
print(datetime.datetime.fromtimestamp(
int(location.get("timestampMs"))/1000
).strftime("%Y-%m-%dT%H:%M:%SZ"))
要从json文件获取POSIX时间戳并将其转换为表示UTC时间的原始datetime对象,请执行以下操作:
#!/usr/bin/env python
import io
import json
from datetime import datetime, timedelta
with io.open('LocationHistory.json', encoding='utf-8') as file:
data = json.load(file)
for item in data['data']['items']:
timestamp_millis = int(item['timestampMs'])
utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=timestamp_millis)
print(utc_time.isoformat() + 'Z')
输出
注意:保留毫秒 非常感谢大卫,这解决了问题!我感谢您的时间:)如果这不是问题,这只打印出正确的日期时间,我如何永久更改所有的时间短信?我是说:对于位置中的位置:locations=datetime….ect(而不是打印),还是说:对于位置中的位置:location.get(“timestampMs”)=datetime.datetime.fromtime。。。。。我问这个问题的原因是,我将这些数据写入一个输出文件,但输出仍然显示时间戳值,即1374870896803,而不是日期时间。Thanksit不正确,除非本地时区是utc,并且您不想保留毫秒。顺便说一句,在这里使用
d.get(key)
是没有意义的(d[key]
也有效)谢谢J.F塞巴斯蒂安。我将不得不发布另一个问题,它似乎回答了我的下一个问题。我并不想打印数据,而是将所有json数据写入.kml文件(包括更改的日期时间数据)。你有什么建议?发布一个新问题?我的目标是:对于location in location:kml_file.write(locations)简单地说…指定具体问题是什么,包括示例输入、所需输出以及您得到的内容。不要解释错误:按原样包含完整的回溯。请原谅。当我开始在stack上工作时,我会发布带有各种问题的问题,并且总是标记“down”。所以我试着让我的问题更容易理解。从现在起我会记住你说的话。谢谢你,我会看一看:)
2013-07-26T20:34:56.803000Z
2013-07-26T20:31:51.762000Z