贝尔字符作为Python打印输出中的字段分隔符

时间:2016-11-22 02:54:45

标签: python python-2.7

我对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

1 个答案:

答案 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解析内容会更好,这会让你的问题看起来比实际上更复杂,并且因此无法测试您的代码或对其进行修改。