在第三方脚本中,它意味着吐出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的代码。如果你正在努力帮助像我这样的克里汀,那就不用担心了。我刚来这里寻求帮助。
由于
答案 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..