首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

python积累--读写文本文件实例(3)

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()的弊端:
由于是逐行读取,速度比较慢
返回列表