Python——文件读取与写入
一、文件打开方式
打开方式 |
指针位置 |
读取的文件类型 |
|
r |
只读(默认模式) |
指针在文件开头,文件不存在则报错 |
1. 默认读取文件都是ASCII编码的文本文件 2. 如果读取的文件是二进制文件,如图片,视频需要使用'rb'模式 3. 读取非ASCII编码的文本文件,必须 以二进制模式打开,再解码 f=open('E:/test.txt','rb') f.read().decode('gbk')
|
rb |
二进制格式只读 |
指针在文件开头,文件不存在则报错 |
|
r+ |
可读可写 |
指针在文件开头,文件不存在则报错 |
|
rb+ |
二进制格式可读可写 |
指针在文件开头,文件不存在则报错 |
|
w |
只写 |
文件存在,则覆盖;不存在,则创建 |
|
wb |
二进制格式只写 |
文件存在,则覆盖;不存在,则创建 |
|
w+ |
可读可写 |
文件存在,则覆盖;不存在,则创建 |
|
wb+ |
二进制格式可读可写 |
文件存在,则覆盖;不存在,则创建 |
|
a |
追加 |
文件存在,指针在文件尾增加;不存在,则创建 |
|
ab |
二进制格式追加 |
文件存在,指针在文件尾增加;不存在,则创建 |
|
a+ |
可读可写 |
文件存在,指针在文件尾增加;不存在,则创建 |
|
ab+_ |
二进制格式可读可写 |
文件存在,指针在文件尾增加;不存在,则创建 |
二、文件打开方法
|
举例 |
文件不存在 |
是否需要调用close()方法 |
注意 |
Python内置open函数 |
f=open('E:/test.txt','r') |
文件不存在则会IOError |
必须书写调用close() |
1.文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也有限 2.当写文件时,操作系统不会立刻将数据写入磁盘,而是放内容缓存,空闲时再写入,只有调用close()方法时,操作数据才会将没有写入的数据写入磁盘。不写close()方法有可能只写了一部分数据到磁盘,剩下的数据丢失了 3.文件不存在,可以用try…finally避免,但与with比较麻烦
|
With语句 |
with open('E:/test.txt','r') as f: |
文件不存在则会IOError |
with语句自动调用close()方法 |
三、文件读写定位操作
|
方法 |
用法 |
注意 |
读 |
f.read(size) |
如果没有size即f.read()一次性读取文件全部内容,返回类型str;如果有size即f.read(50)读取最多的字节内容 |
1.文件很小,可一次性读取,文件较大,超过内存大小,内容爆掉 2.文件过大,可用f.read(size),x为每次最多读取size字节的内容 3.如果是配置文件,调用 readlines()最方便 |
f.readline() |
每次读取一行内容,返回类型str |
||
f.readlines() |
一次读取所有内容并按行返回list |
||
写 |
f.write() |
写文件 |
将字符串写入文件,如果写入结束,需要在字符串后面加上"\n" |
定位 |
f.seek(offset,from_what) |
f.seek(2,0)读取位置向后移动2个字符 |
from_what值为文件的开始位置,可以省略;offset为偏移量 |
当前位置 |
f.tell() |
f.tell(),返回当前文件位置 |
四、读取非ASCII文件,如utf-8,gbk类型
方法1:读取时指定类型encoding='utf-8'
with open('E:/test1.txt','r',encoding='utf-8') as f
print(f.read())
结果:
你好
方法2:
必须:1.以二进制模式打开,再解码
codecs模块:读文件时自动转换编码,直接读出unicode
import codecs
with codecs.open('E:/test.txt','rb','utf-8') as f:
f.read()
注意:有些编码不规范,会遇到UnicodeDecodeError,可能文件中有些非法编码的字符,遇到这种情况,可用open()函数可以接收errors参数,表示如果遇到编码错误后如何 处理,最简单方式是直接忽略f=open('E:/test1.txt','r',encoding='gbk',errors='ignore')
五、File对象的属性
f.closed |
文件已关闭返回true,否则返回false |
f.mode |
返回被打开文件的访问模式 |
f.name |
返回文件名称 |