无法格式化python中链接的输出

时间:2015-09-12 15:33:19

标签: python

我正在尝试访问天气api数据。它返回一条较长的人类可读的单行。我试图用'{/ n'替换每个括号({),以便括号保留,但是为了更好的可读json,还有一个新行符号。 但它返回shell中新行的每个字符。

import urllib2

url2 = 'http://api.openweathermap.org/data/2.5/find?q=london,PK&units=metric'
data = urllib2.urlopen(url2)
s = data.read()
count = 0
s = s.replace('{',"{\n")
#s = ''.join(s)
for line in s:
    print line
    count = count + 1
print count

在join()之后问题仍然存在。 此代码后的有问题输出类似于此enter image description here

3 个答案:

答案 0 :(得分:3)

问题在于:

for line in s:
    print line

此时,它将在一个单独的行上打印每个字符 - 这就是打印的作用(它为每个打印命令添加了一个尾随换行符),如下代码所示:

print 1
print
print 2

输出:

1

2

您可能会对名称line感到困惑,但它不是特殊的变量名称。您可以将字线更改为任何有效的变量名称,它将以相同的方式工作。

for循环将迭代迭代。如果它是一个文件,它将执行每一行。列表将是每个元素,并且字符串遍历每个字符。因为你说打印它然后单独打印它们。

您是否期望来自API的非字符串响应?如果它给出这样的列表:

["calls=10","message=hello"]

然后你的for循环将依次打印每个。但如果它只是一个字符串,如"message=hello",它将打印每个字符。

{之后是否有空白换行符?因为replace命令工作正常。

答案 1 :(得分:3)

为什么不使用Python中标准的json库的内置功能?

{
    "cod": "200",
    "count": 1,
    "list": [
        {
            "clouds": {
                "all": 20
            },
            "coord": {
                "lat": 38.7994,
                "lon": -89.9603
            },
            "dt": 1442072098,
            "id": 4237717,
            "main": {
                "humidity": 67,
                "pressure": 1020,
                "temp": 16.82,
                "temp_max": 18.89,
                "temp_min": 15
            },
            "name": "Edwardsville",
            "sys": {
                "country": "United States of America"
            },
            "weather": [
                {
                    "description": "few clouds",
                    "icon": "02d",
                    "id": 801,
                    "main": "Clouds"
                }
            ],
            "wind": {
                "deg": 350,
                "speed": 4.6
            }
        }
    ],
    "message": "accurate"
}

输出:

{{1}}

答案 2 :(得分:1)

s只是一个字符串,因此for x in s实际上会迭代s的单个字符,而不是其行。当for line in f是文件对象时,我认为您将其与f混淆了!