Python3读文件和问题解决

2021-06-21 05:04

阅读:475

标签: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)

更改完错误后输出结果:

技术分享图片

 

Python3读文件和问题解决

标签:http   def   编码格式   ignore   一个   info   没有   列操作   格式   

原文地址:https://www.cnblogs.com/Rare2/p/9686034.html


评论


亲,登录后才可以留言!