2016年9月22日
第二章
来自bit.ly的1.usa.gov数据
import json path = '/home/python3/data/pydata-book-master/ch02/usagov_bitly_data2012-03-16-1331923249.txt' #records = [json.loads(line) for line in open(path)] with open(path) as jsonfile: data = json.load(jsonfile)
问题1:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 228171: ordinal not in range(128)
解决
Python 3 decodes text files when reading. The default encoding is taken from locale.getpreferredencoding(False)
, which evidently for your setup returns 'ASCII'
. See the open()
function documenation:
In text mode, if encoding is not specified the encoding used is platform dependent:
locale.getpreferredencoding(False)
is called to get the current locale encoding.
Instead of relying on a system setting, you should open your text files using an explicit codec:
currentFile = open(filename, 'rt', encoding='latin1')
where you set the encoding
parameter to match the file you are reading.
Python 3 supports UTF-8 as the default for source code.
You may want to read up on Python 3 and Unicode in the Unicode HOWTO, which explains both about source code encoding and reading and writing Unicode data.
import json path = '/home/python3/data/pydata-book-master/ch02/usagov_bitly_data2012-03-16-1331923249.txt' #records = [json.loads(line) for line in open(path)] with open(path) as jsonfile: data = json.load(jsonfile.encoding("latin1"))问题二
TypeError: 'str' object is not callable