open() 打开文件,默认只读模式,赋值时存一个文件句柄(内存对象,记录了该文件的一些属性,名字,位置,大小等)
r: 只读
w: 只写,新建文件,覆盖之前的同名文件
a: 追加,往内容末尾写
r+: 读写,这里的写只能往末尾写
w+: 写读,这里的写是新建文件,同样只能往末尾写
a+: 追加读写
rb: 二进制文件的读写
read() 读文件,可加入参数指定读取内容的长度
>>> f = open('today.txt') >>> f.read() '今天星期五啦 明天好好休息,加油!'
write() 写文件 w模式会新建文件再写入,会覆盖之前的文件;a模式在原文件上的末尾追加内容
>>> f = open('today.txt', 'w') >>> f.write('明天周一,加油!') 8 >>> f.close() >>> f = open('today.txt') >>> f.read() '明天周一,加油!' >>> f.close() >>> f = open('today.txt', 'a') >>> f.write('我要努力努力再努力!') 10 >>> f.close() >>> f = open('today.txt') >>> f.read() '明天周一,加油!我要努力努力再努力!'
readline() 读一行
>>> f = open('today.txt', 'r') >>> f.readline() '明天周一,加油!我要努力努力再努力!'
readlines() 把内容转为列表,各行内容作为列表中的元素
>>> f = open('today.txt', 'r') >>> f.readlines() ['明天周一,加油!我要努力努力再努力!']
遍历每行的两种方法
>>> for i in f.readlines(): ... print(i) ... 明天周一,加油!我要努力努力再努力! 今天周一,我在继续努力! 明天周二,我争取更努力! >>> for i in f: # 这个方法比上面的性能高,因为f就是一个迭代器 ... print(i) ... 明天周一,加油!我要努力努力再努力! 今天周一,我在继续努力! 明天周二,我争取更努力
tell() 返回当前文件句柄的指针位置
>>> f = open('today.txt', 'r') >>> f.read(2) '明天' >>> f.tell() 4
seek() 把文件句柄的指针移到指定位置
>>> f = open('today.txt', 'r') >>> f.seek(4) 4 >>> f.read() '周一,加油!我要努力努力再努力! 今天周一,我在继续努力! 明天周二,我争取更努力!'
encoding 返回文件的编码
>>> f = open('today.txt', 'r') >>> f.encoding 'cp936'
fileno() 文件句柄的编号(在IO接口中)
name 文件名
isatty() 是否为一个终端设备
seekable() 是否可以移动文件指针,终端设备文件移不了
readable() 是否可读
writeable() 同理
flush() 刷新(把内存中的缓存写入磁盘里,写文件时,先放到内存中的缓存中,等到缓存一定内容时,再写入硬盘)。
进度条
import sys, time for i in range(100): sys.stdout.write('*') # sys.stdout.write与print的区别是继续打印不换行 sys.stdout.flush() time.sleep(0.1)
truncate() 从头开始截取内容(不受文件句柄指针的影响),不指定长度时,会清空文件内容
>>> f = open('today.txt', 'a') >>> f.truncate(10) >>> f.close() >>> f = open('today.txt', 'r') >>> f.read() '明天周一,'
修改文件的方法:
1.像vim那样,先把文件读到内存中,再改。(文件大的时候,占用内存大,不推荐!)
2.边改边写到新的文件。(逐行读第一个文件,(修改)写入另一个文件)
with语句 执行完自动close, 支持多文件一起close
>>> with open('today.txt', 'r') as f: ... f.read() ... '明天周一,' with open('log1') as f1, open('log2') as f2: # 多文件操作,逗号隔开 pass