Python3读文件和问题解决

Posted rare2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3读文件和问题解决相关的知识,希望对你有一定的参考价值。

文件是存储在硬盘上的,程序读文件首先就是要将文件和内存对象关联起来,打开文件,再通过一系列操作使得对象能获得文件的内容。

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‘ 技术分享图片

这样二进制的读入方式会将一些不必要的换行符‘ ‘或文件结束符‘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读文件和问题解决的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

学习笔记:python3,代码片段(2017)

scrapy主动退出爬虫的代码片段(python3)

python3读文件编码错误怎么办

scrapy按顺序启动多个爬虫代码片段(python3)

将可读格式的json.dumps写入Python3中的文件[重复]