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

无法在python中格式化链接的输出,python,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

我正在尝试访问天气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()之后,问题仍然存在。 此代码后有问题的输出如下所示

问题在于:

for line in s:
    print line
此时,它将在单独的一行上打印每个字符-这就是print所做的(在每个打印命令中添加一个尾随换行符),如下代码所示:

print 1
print
print 2
哪个输出:

1

2
您可能会混淆名称
,但它不是一个特殊的变量名。您可以将单词行更改为任何有效的变量名,其工作方式相同

for循环将在一个iterable上迭代。如果它是一个文件,它将执行每一行。每个元素都有一个列表,每个字符都有一个字符串。因为你要打印它,所以它会单独打印它们

您是否希望API提供非字符串响应?如果它提供如下列表:

["calls=10","message=hello"]
然后for循环将依次打印每个字符。但如果它只是一个字符串,比如
“message=hello”
它将打印每个字符



以及
{
?因为
replace
命令工作正常。

s
只是一个字符串,所以对s中的x执行
实际上是在
s
的单个字符上迭代,而不是在它的行上。我认为当
f
是文件对象时,你把它与
for line in f
混淆了!

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

import urllib2
import json

url2 = 'http://api.openweathermap.org/data/2.5/find?q=london,PK&units=metric'
data = urllib2.urlopen(url2)

# read the contents in and parse the JSON.
jsonData = json.loads(data.read())

# print it out nicely formatted:
print json.dumps(jsonData, sort_keys=True, indent=4, separators=(',', ': '))
输出:

{
    "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"
}

删除并仅使用一个“print s”语句就解决了这个问题。太好了。我是python新手。@UmerTahir如果这有帮助,请记住单击旁边向下箭头下方的灰色勾号!它会将此问题标记为已解决。正如我之前对您的答案投了高票。我的下一次投票将排队等待一分钟。我也是stackoverflow新手他们不让我快速投票。所以现在我可以检查它。这就是我试图做的。打印格式很好。