Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何更改“的所有实例”;时间戳;在.JSON文件中添加到日期时间对象_Json_Python 2.7_Datetime_Timestamp - Fatal编程技术网

Python:如何更改“的所有实例”;时间戳;在.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

我有一个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"]
现在,我想将所有出现的“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