从Json int中删除时间戳

时间:2015-03-28 16:37:30

标签: python json split timestamp

在第三方脚本中,它意味着吐出Json让我解码,而是预先设置一个时间戳:

2015-03-28T16:32:41.875199+00:00 {"1": {"Power (kW)": "0.301", "Energy Imported (kWh)": "62.281"...}}

所有这些都是一个大整数。我试图根据第一个大括号之前包含的空格/空格来拆分它,但是根本不能这样做。我真的很感激一些指示 - 我知道我的问题非常基本,显然我很快就会被阻止,除非我改进,所以请不要再向我提出另一个简单的问题!

2015年3月31日更新了@Alex。

我意识到这似乎是不可能的,但向您保证它会返回int的数据类型。你可能不相信,但你必须,check the guy's code here。这就是我以前称之为剧本的内容:

get_power=os.system("python /fetch_neurio.py --ip 172.16.0.8 --format json --type sensor")
thedata = get_power
print type(thedata)

如果您发现太令人难以置信,那么请亲自查看fetch_neurio的代码。如果你正在努力帮助像我这样的克里汀,那就不用担心了。我刚来这里寻求帮助。

由于

3 个答案:

答案 0 :(得分:1)

不知道你的意思是什么"一个大的int"在文本主题中,因为很明显数据是字符串,而不是整数。我会假设你重复使用int只是一个奇怪的重复拼写而你的意思是" string"代替。

鉴于

data = '2015-03-28T16:32:41.875199+00:00 {"1": {"Power (kW)": "0.301", "Energy Imported (kWh)": "62.281"}}'

(删除...以使JSON部分在语法上有效),

import json

timestamp, jsondata = data.split(None, 1)
pythondata = json.loads(jsondata)

...是的, 就像这一样简单! - )

"分裂在None"意味着分割1个空格字符的序列(如果看起来像空白的东西可能是标签或其他什么,我们不关心:-)。分裂方法的第二个可选参数,这里1,意味着只进行一次拆分(在第一个空白序列上) - 从而产生两个我们相应分配给两个变量的部分。

当然还有其他可能性,例如使用正则表达式,如果data中的异常比你到目前为止传达的更糟(即,不仅仅是预先划分的,以空格分隔的时间戳),根据您已经传达的内容,这种简单的方法就足够了。

答案 1 :(得分:0)

传递maxsplit第二个参数,将其拆分为1。

'2015-03-28T16:32:41.875199+00:00 {"1": {"Power (kW)": "0.301", "Energy Imported (kWh)": "62.281"...}}'.split(' ',1)[1]

答案 2 :(得分:0)

您在屏幕上看到的内容(以2015-03-28...开头的行)是您使用os.system()函数启动的shell命令中的输出。它直接打印到stdout。 os.system()返回命令的退出代码(整数);它不会返回输出。

要捕获子进程的输出,可以使用:subprocess.check_output()。或者(更好)导入模块并调用相应的函数,以获得结果,而无需不必要的外部进程和打印/解析:

#!/usr/bin/env python
import fetch_neurio #NOTE: make sure fetch_nerio.py's directory is in pythonpath

url = 'http://{ip}/both_tables.html'.format(ip='172.16.0.8')
(timestamp, data) = fetch_neurio.fetch_page(url, localtime=False)
parsed_data = fetch_neurio.parse_readings(data)
readings = fetch_neurio.get_sensor_readings(parsed_data)
# use timestamp, readings here..