我对Python很新,需要一些帮助。
我在Python 2.6上运行Python脚本来解析一些JSON。
示例代码:
if "prid" in data[p]["prdts"][n]:
print data[p]["products"][n]["prid"],
if "metrics" in data[p]["prdts"][n]:
lenmet = len(data[p]["prdts"][n]["metrics"])
i = 0
while (i < lenmet):
if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"):
print data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"]
break
现在,这会在2列中打印值:
prid price
123 20
234 40
如您所见,上面的字段分隔符为' '
。如何在输出中放置像BEL字符这样的字段分隔符?
示例预期输出:
prid price
123^G20
234^G40
答案 0 :(得分:0)
FWIW,你的while
循环不会增加i
,所以它会永远循环,但我认为这只是一个副本&amp;粘贴错误,我会在其余的答案中忽略它。
如果要使用两个单独的print
语句在一行上打印数据,则无法避免获得第一个print
语句产生的空间。相反,只需保存prid数据,直到您可以使用字符串连接一次性打印它。例如,
if "prid" in data[p]["prdts"][n]:
prid = [data[p]["products"][n]["prid"]]
if "metrics" in data[p]["prdts"][n]:
lenmet = len(data[p]["prdts"][n]["metrics"])
i = 0
while (i < lenmet):
if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"):
price = data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"]
print str(prid) + '\a' + str(price)
break
请注意,我明确将prid和price转换为字符串。显然,如果这些项中的任何一个已经是一个字符串,那么你不需要将它包装在str()
中。通常,我们可以让print
将对象转换为字符串给我们,但我们不能这样做
print prid, '\a', price
这里因为这会在每个项目之间给我们一个不需要的空间。
另一种方法是使用新的print()
函数,我们可以在其他导入之前使用脚本顶部的__future__
导入进行导入:
from __future__ import print_function
# ...
if "prid" in data[p]["prdts"][n]:
print(data[p]["products"][n]["prid"], end='\a')
if "metrics" in data[p]["prdts"][n]:
lenmet = len(data[p]["prdts"][n]["metrics"])
i = 0
while (i < lenmet):
if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"):
print(data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"])
break
我不明白你为什么要用BEL作为分隔符而不是更传统的东西,例如TAB。 BEL char可以在你的终端中打印为^ G,但它在我看来是不可见的,如果你将这个输出保存到文本文件,它可能无法在文本查看器/编辑器中正确显示。
顺便说一下,如果你发布一个专注于你的实际打印问题的Minimal, Complete, Verifiable Example,而不是那些疯狂的JSON解析内容会更好,这会让你的问题看起来比实际上更复杂,并且因此无法测试您的代码或对其进行修改。