我有一个存储位置数据的LocationHistory.json文件。数据如下所示:
{
"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"]
现在我想改变" timestampMs"的所有出现次数。到日期时间对象。我通过回答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,我不知道如何循环或迭代所有出现的" timestampMs"在LocationHistory.json文件中并更改所有" timestampsMs"从1374870896803到2014-09-03 .....
我试过了:
for location in locations:
print(datetime.datetime.fromtimestamp(
int("timestampMs")
).strftime("%Y-%m-%dT%H:%M:%SZ")
)
(当我尝试运行它时,这会产生无效的语法错误)
谢谢
答案 0 :(得分:2)
从json文件获取POSIX时间戳并将它们转换为代表UTC时间的天真日期时间对象:
#!/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')
2013-07-26T20:34:56.803000Z
2013-07-26T20:31:51.762000Z
注意:保留毫秒数。
答案 1 :(得分:0)
要从位置字典中提取数据,您可以使用get方法,然后将整数除以1000以获得没有毫秒的时间戳:
for location in locations:
print(datetime.datetime.fromtimestamp(
int(location.get("timestampMs"))/1000
).strftime("%Y-%m-%dT%H:%M:%SZ"))