Board logo

标题: python积累--读写文本文件实例(3) [打印本页]

作者: look_w    时间: 2019-5-16 14:46     标题: python积累--读写文本文件实例(3)

读取其他文件

二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件即可:

>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节


字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()


异常编码字符处理

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')



read()、readline() 和 readlines()对比

Python的文本文件的内容读取中,有三类方法:read()、readline()、readlines(),这三种方法各有利弊,下面逐一介绍其使用方法和利弊。

假设 sxl.txt文件内容如下:

i like the movie
i ate an egg


###read()方法

read()方法表示一次读取文件全部内容,该方法返回字符串。

f = open("sxl.txt")
lines = f.read()
print lines
print(type(lines))
f.close()



输出结果:

i like the movie
i ate an egg
<class 'str'>



read()是最简单的一种方法,一次性读取文件的所有内容放在一个大字符串中,即存在内存中。

read()的利端:
方便、简单
一次性独读出文件放在一个大字符串中,速度最快
read()的弊端:
文件过大的时候,占用内存会过大
readline()方法

该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。

f = open("sxl.txt")
line = f.readline()
while line:
    print (line)
    print(type(line))
    line = f.readline()
f.close()


输出结果:

i like the movie
<class 'str'>
i ate an egg
<class 'str'>



readline()逐行读取文本,结果是一个list。
readline()的利端:
占用内存小,逐行读取
readline()的弊端:
由于是逐行读取,速度比较慢




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0