标签:http def 编码格式 ignore 一个 info 没有 列操作 格式
文件是存储在硬盘上的,程序读文件首先就是要将文件和内存对象关联起来,打开文件,再通过一系列操作使得对象能获得文件的内容。
open()方法能打开文件并在内存中创建一个文件对象。
使用方法:open(磁盘文件名,打开方式)
1 def main(): 2 file = open(‘news_tensite_xml.dat‘,‘r‘) 3 for i in range(20): 4 line = file.readline() 5 print(line)
6 main()
但是这样写是有问题的,我们看看问题都出在哪里。
问题1:没有进行关闭文件的操作
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。
1 def main(): 2 file = open(‘news_tensite_xml.dat‘,‘r‘) 3 for i in range(20): 4 line = file.readline() 5 print(line) 6 file.close() 7 main()
问题2:编码格式报错
错误的意思是Unicode的解码(Decode)出现了错误(Error),以gbk编码的方式去解码(该字符变成Unicode),但是位置440处的字节0xfd无法通过gbk的方式解码。
这个错误就是说可能要处理的字符本身不是gbk编码,但是却以gbk编码去解码 。比如,字符串本身是utf-8的,但是却用gbk去解码utf-8的字符串,所以结果必然会出错。
解决方法:
1(不合适)以二进制的形式读入,将打开方式‘r‘改为‘rb‘
这样二进制的读入方式会将一些不必要的换行符‘\n‘或文件结束符‘0x1A‘(EOF)当作正常字符解码,使得后续分词操作、词频统计无法进行
2 加编码方式
在打开文本的时候,就指明编码方式
def main(): file = open(‘news_tensite_xml.dat‘,‘r‘,encoding=‘gb18030‘) #其中gb18030可换成utf-8或gbk for i in range(20): line = file.readline() print(line) file.close() main()
gb18030是一种编码范围更广泛的编码方式,如果有连它都无法编码的字符,可以在语句中加上errors属性
1 file = open(‘news_tensite_xml.dat‘,‘r‘,encoding=‘gb18030‘,errors=‘ignore‘)
更改完错误后输出结果:
标签:http def 编码格式 ignore 一个 info 没有 列操作 格式
原文地址:https://www.cnblogs.com/Rare2/p/9686034.html