设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第45课】 查天气(3)

[复制链接]

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

51#
发表于 2016-1-22 19:56:06 |只看该作者
今天一切顺利~~
关于编码的问题,自己看了一些文章,大致有一些了解,但还是有一个问题想请教crossin先生:
我看到说python内部使用unicode编码,为什么从json.loads之后,data字典里面把原来content里面的内容都加u'xxx'了呢?是因为content是json格式,python处理的时候要先自动转成unicode格式,而且还要这样显示出来吗?这样,后面要访问data里某个键对应的值的时候,就不用再在内容前面加u'xxx'了?
  1. # -*- coding: cp936 -*-
  2. import urllib2
  3. import json
  4. from city import city
  5. cityname=raw_input("Which city's weather do you want to know?\n")
  6. citycode=city.get(cityname)
  7. print citycode
  8. if citycode:
  9.     try:
  10.         url='http://www.weather.com.cn/data/cityinfo/%s.html'%citycode
  11.         print url
  12.         content=urllib2.urlopen(url).read()
  13.         print content
  14.         data=json.loads(content)
  15.         print data
  16.         print type(content)
  17.         print type(data)
  18.         result=data['weatherinfo']
  19.         str_temp='%s\n%s - %s'%(result['weather'],result['temp1'],result['temp2'])
  20.         print str_temp
  21.     except:
  22.         print 'Query failure.'
  23. else:
  24.     print "Couldn't find the city."
复制代码

Python25.png (19.45 KB, 下载次数: 538)

Python25.png

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

52#
发表于 2016-1-23 11:13:59 |只看该作者
catherinemic 发表于 2016-1-22 19:56
今天一切顺利~~
关于编码的问题,自己看了一些文章,大致有一些了解,但还是有一个问题想请教crossin先生: ...

单独print某个字符串值的时候,print会帮你默认做一次编码。而在list或者dict中直接print,不会对每一个元素解码,只会保持原本的样子
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

53#
发表于 2016-1-23 12:08:56 |只看该作者
本帖最后由 catherinemic 于 2016-1-23 12:09 编辑
crossin先生 发表于 2016-1-23 11:13
单独print某个字符串值的时候,print会帮你默认做一次编码。而在list或者dict中直接print,不会对每一个 ...

这里大概明白了,谢谢crossin老师~
那为什么在访问dict的时候,只用写result['weather'],而不用result[u'weather']呢?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

54#
发表于 2016-1-24 10:04:03 |只看该作者
catherinemic 发表于 2016-1-23 12:08
这里大概明白了,谢谢crossin老师~
那为什么在访问dict的时候,只用写result['weather'],而不用result呢 ...

也是程序默认做了转换
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

55#
发表于 2016-1-24 15:35:19 |只看该作者
crossin先生 发表于 2016-1-24 10:04
也是程序默认做了转换

这样啊,谢啦~
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

56#
发表于 2016-3-4 12:57:20 |只看该作者
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/hammer/Desktop/try.py
  File "/Users/hammer/Desktop/try.py", line 6
SyntaxError: Non-ASCII character '\xe4' in file /Users/hammer/Desktop/try.py on line 6, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

我的出现了这个错误

P.S. 我的city文件和代码文件的开头都加上了 # -*- coding:utf-8 -*-
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

57#
发表于 2016-3-4 13:47:46 |只看该作者
王大锤 发表于 2016-3-4 12:57
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/hammer/Desktop/try.py
...

try.py 没有申明编码类型。你再确认一下吧,或者改成#coding:cp936 试试看
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

58#
发表于 2016-3-4 13:48:40 |只看该作者
王大锤 发表于 2016-3-4 12:57
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/hammer/Desktop/try.py
...

另外不要用python的保留字来命名自己的文件或方法、变量等,不然可能会出问题,try本身已有用法。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

59#
发表于 2016-3-5 00:34:56 |只看该作者
crossin先生 发表于 2016-3-4 13:48
另外不要用python的保留字来命名自己的文件或方法、变量等,不然可能会出问题,try本身已有用法。 ...

谢谢先生
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

60#
发表于 2016-3-5 00:41:37 |只看该作者
先生,已经把文件名从try改成lesson43,可是错误还是没有变化 屏幕快照 2016-03-05 上午12.40.02.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 13:14 , Processed in 0.018387 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部