1.模式
前面加b,就是以二进制数据进行存取,bytes类型
模式 |
文件存在 |
文件不存在 |
操作 |
文件内容 |
r |
正常打开 |
报错 |
只读 |
只可读不可写。可以用指针调节位置去读。 |
w |
清空文件 |
创建新文件 |
只写 |
文件内容就被清空。可以调节指针位置去写。 |
a |
正常打开 |
创建新文件 |
只写 |
不覆盖原文件内容。只能在末尾追加内容,调节指针无法改变写的位置。 |
r+ |
正常打开 |
报错 |
读写 |
不覆盖原文件内容。指针默认在末尾追加内容,指针在其它位置写操作时,覆盖原文件内容。根据指针位置读文件 |
w+ |
清空文件 |
创建新文件 |
读写 |
打开文件时,内容就被清空。 |
a+ |
正常打开 |
创建新文件 |
读写 |
指针默认在末尾,写文件只能追加内容,根据指针位置读文件。 |
open参数
open(file,mode=‘r’,buffering=-1,encoding=None,errors=None,
newline=None, closefd=True, opener=None)
参数说明
file: 必需,文件路径(相对或者绝对路径)
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf-8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
2.文件的操作
写入
文件对象. write(str)
参数str表示要写入的字符串。若字符串写入成功,write()方法返回本次写入文件的长度。而且write()方法不能自动换行。需要手动的添加“\n”
文件对象. writelines([str,str,str,str])
向文件中写入字符串序列
# 使用open方式写入
f=open('test.txt','w')
f.write('我的文件内容'
f.close()#关闭文件
# 使用with open方式写入
with open('test.txt','w') as f:
f.write('我的文件内容')
读取
read():默认会把文件的所有内容一次性读取到内存,如果文件太大,对内存的占用会非常严重;
readline():可以一次读取一行内容,方法执行后,会把文件指针移动到下一行。
注意:
read( )(参数缺省时)和readlines( ) 方法都可一次读取文件中的全部数据,但这两种操作都不够安全。因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存。
为了保证读取安全,通常多次调用read()方法,每次读取size字节的数据。或者使用readline()方法按行读取内容。
# 使用open方式读取
f=open('test.txt','r')
data = f.read()
f.close()
print(data)
# 使用with open方式读取
with open('test.txt','w') as f:
data = f.read()
文件的定位读取
tell()方法:获取文件当前的位置;
seek()方法:设置当前文件读写位置
tell()
f = open('a.txt', 'r', encoding='utf-8')
f.readline()
print(f.tell())
# 如果有换行的话【\n】也算位置; 2位
# 一个英文字符和标点符号:1位
# 一个中文字符和中文标点:3位
seek(offset, from)
offset: 表示偏移量(字节数),即读写位置需要移动的字节数;
from: 表示从哪里开始偏移,
0 表示从开始位置偏移(默认值)
1 从当前位置偏移
2 文件结尾作为基准进行偏移
获取文件名字
with open('a.txt', 'r', encoding='utf-8') as f:
print(f.name)
获取文件大小
import os
b = os.path.getsize("文件的路径")
with 方法打开处理文件帮我我们做了什么
打开文件在进行读写的时候可能会出现一些异常状况,这时候with方法帮我们实现了finally中f.close。