python学习(十一) 文件和流
11.1 打开文件
>>> f = open(r'c:\text\somefile.txt'), 第一个参数是文件名,必须有;第二个是模式;第三个参数是缓冲。
11.1.1 文件模式
如果open函数只带一个文件名参数,那么我们可以获得能读取文件内容的文件对象。如果要向文件内写入内容,则必须提供一个模式参数
'r' -----读模式(制定读模式与不制定的效果是一样的)
'w'-----写模式
'a'-----追加模式
'b'-----二进制模式(python假定处理的都是文本文件(包含字符),但是如果是其他类型的文件(二进制),比如声音或者图像,那么要指定 b模式)
(为什么使用二进制模式: \n 和 \r\n的转换,但是如果是二进制文件就不会转。)
'+'-----读写模式
11.1.2 缓冲
如果是0(False),I/O就是无缓冲的,所有的读写操作都是直接针对硬盘;
如果是1(True),就是有缓冲的,使用内存代替硬盘,速度快,只有在flush或close的时候才会更新硬盘上的数据。
大于1,代表缓冲区大小(单位是字节),-1代表使用默认缓冲区大小。
11.2 基本的文件方法
11.2.1 读和写
>>> f = open(r'c:\text\somefile.txt','w') // 写 >>> f.write('abcd \n ef \r\n gh') 15 >>> f.flush() // 调用close()或flush()才能真正写进去
>>> f=open(r'c:\text\somefile.txt', 'r') // 读
>>> f.read(4) // 只读4个
'abcd'
>>> f.read() // 读所有的
' \n ef \n\n gh'
11.2.2 管式输出
前一个命令的输出是下一个命令的输入,用符号“|”连接
11.2.3 读写行
>>> f.readline() '' >>> f.seek(0) // 定位到文本开始 0 >>> f.readline() // 读取一个行 'abcd \n' >>> f.readlines() // 读取所有的行,返回列表 [' ef \n', '\n', ' gh']
f.writelines(['afa','gdf','gfdg']) // 按行的方式写入列表
11.2.4 关闭文件
对文件操作应该,在finally中调用 f.close(), 这样保证出异常了也可以正确关闭文件。
11.2.5 使用基本文件方法
11.3 对文件内容进行迭代
11.3.1 按字节处理
f = open(filename) char = f.read(1) while char: process(char) char = f.read(1) f.close()
11.3.2 按行操作
readline()
11.3.3 读取所有内容
read() : 不带参数的read方法可以读取所有行。
readlines(): 读取所有行。
11.3.4 使用fileinput实现懒惰行迭代
readline() 每次只读一行。
import fileimput for line in fileinput.input(filename): process(line)
11.3.5 文件迭代器
f = open(filename) for line in f: processs(line) f.close()