比如,需要打开的数据文件puk_training.utf8的样式如图所示
一、python2 打开文件:
import sys
print(sys.getdefaultencoding()) #系统默认编码方式
f = file(".\\pku_training.utf8") #以file来打开文件
print type(f) #获取f的数据类型
data = f.read()[3:].decode('utf-8') #比如读取数据的的3及其以后数据,注意decode解码
f.close()
print type(data)
data = data.encode('utf-8') #以utf-8方式编码
print type(data)
data = data.decode('utf-8') #以utf-8方式解码
print type(data)
tokens = data.split(' ') #以数按空格切分词,存放到list里边
print type(tokens) #打印tokens的数据类型
print type(tokens[1]) #打印tokens里边数据的数据类型
print tokens[1].encode('utf-8') #直接打印tokens[1]会出错,需要打印str类型
print tokens[1]
输出结果:
#输出结果:
ascii
#测试数据类型打印
充满 #tokens[1].encode('utf-8')的值
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) #报错,不能直接打印unicode编码
python2中,我们使用decode()和encode()来进行解码和编码
在python2中,使用unicode类型作为编码的基础类型。即
decode() encode()
str -----------> unicode ---------->str
注:python2中,不能直接打印unicode编码,需要将unicode转换成str才能进行打印输出,否则会报错。
二、python3打开文件
import sys
print(sys.getdefaultencoding()) #系统默认编码方式
f=open(".\\pku_training.utf8", encoding='utf-8') # encoding表示编码或者解码的方式,此处为解码
print(type(f))
data = f.read()[3:]
print(type(data))
f.close()
data = data.encode('utf-8')
print(type(data))
data = data.decode('utf-8')
print(type(data))
tokens = data.split(' ')
print(type(tokens))
print(type(tokens[1]))
print(tokens[1]) # str 类型可以打印
print(tokens[1].encode('utf-8')) # bytes 也可以打印
输出结果:
#输出结果:
utf-8
#测试数据类型打印
充满
b'\xe5\x85\x85\xe6\xbb\xa1'
python3中,encoding表征的编码或者解码方式;
decode() encode()
bytes -------------> str ------------->bytes
注:python 3中的str类型对象有点像Python2中的unicode,而decode是将str转为unicode编码,所以str仅有一个encode方法,调用这个方法后将产生一个编码后的byte类型的字符。
python3 的print( )可以打印str和bytes行数据类型。
1、python2中的str对应python3中的bytes,unicode对应str;
2、python2系统默认编码方式为ascii,而python3默认为utf-8;
参考:
python2 encode和decode函数说明:https://blog.csdn.net/renjx_tutu/article/details/72732833
浅淡Python 3.x中encode、decode方法:https://blog.csdn.net/idKevin/article/details/47809055