一、文件打开模式
打开方式 | 指针位置 | |
---|---|---|
r | 只读(默认 ) | 指针在文件开头,文件不存在则报错 |
rb | 二进制只读 | 指针在文件开头,文件不存在则报错 |
r+ | 可读可写 | 指针在文件开头,文件不存在则报错 |
rb+ | 二进制可读可写 | 指针在文件开头,文件不存在则报错 |
w | 只写 | 文件存在,则覆盖;不存在,则创建 |
wb | 二进制只写 | 文件存在,则覆盖;不存在,则创建 |
w+ | 可读可写 | 文件存在,则覆盖;不存在,则创建 |
wb+ | 二进制可读可写 | 文件存在,则覆盖;不存在,则创建 |
a | 追加 | 文件存在,指针在文件尾追加;不存在,则创建 |
ab | 二进制追加 | 文件存在,指针在文件尾追加;不存在,则创建 |
a+ | 可读可写 | 文件存在,指针在文件尾追加;不存在,则创建 |
ab+_ | 二进制可读可写 | 文件存在,指针在文件尾追加;不存在,则创建 |
- 默认读取文件都是ASCII编码的文本文件
- 如果读取的文件是二进制文件,如图片,视频需要使用’rb’模式
- 读取非ASCII编码的文本文件,必须 以二进制模式打开,再解码
f=open(‘E:/test.txt’,‘rb’)
f.read().decode(‘gbk’)
二、文件打开方法
打开方式 | eg | 文件不存在 | 是否需要调用 close()方法 |
---|---|---|---|
open | f=open(‘E:/test.txt’,‘r’) | 文件不存在则会IOError | 必须书写调用close() |
with | with open(‘E:/test.txt’,‘r’) as f | 文件不存在则会IOError | with自带close()方法 |
- 文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也有限
- 当写文件时,操作系统不会立刻将数据写入磁盘,而是放内容缓存,空闲时再写入,只有调用close()方法时,操作数据才会将没有写入的数据写入磁盘。不写close()方法有可能只写了一部分数据到磁盘,剩下的数据丢失了
- 文件不存在,可以用try…finally避免,但与with比较麻烦
三、文件读写定位操作
操作 | 方法 | 用法 |
---|---|---|
读 | f.read(size) | f.read()一次性读取文件全部内容,返回类型str;有size读size(字节)的内容 |
读 | f.readline() | 每次读取一行内容,返回类型str |
读 | f.readlines() | 一次读取所有内容并按行返回list |
写 | f.write() | 写文件 |
定位 | f.seek(offset,from_what) | f.seek(2,0)读取位置向后移动2个字符 |
当前 | f.tell() | f.tell(),返回当前文件位置 |
- 文件很小,可一次性读取,文件较大,超过内存大小,内容爆掉
- 文件过大,可用f.read(size),x为每次最多读取size字节的内容
- 如果是配置文件,调用 readlines()最方便
- 将字符串写入文件,如果写入结束,需要在字符串后面加上"\n"
- from_what值为文件的开始位置,可以省略;offset为偏移量