打开和关闭文件
>>> f = open('./demo1.py') # 使用open打开文件,返回值是一个File-like对象
>>> f.read() # 使用read读取文件
"this is open!!"
>>> f.close() #close 方法关闭文件
文件对象的操作
- 读
- 写
文件的操作和文件的打开方式是相关的
- ‘r’ 打开可读文件(默认)
- ‘w’ 打开写入,并且清空文件
- ‘x’ 创建一个新文件并将其打开以进行写入
- ‘a’ 文件必须不存在,否则会抛出异常,如果文件存在,则追加到文件末尾
- ‘b’ 二进制模式
- ‘t’ 文字模式(默认)
- ‘+’ 打开一个磁盘文件进行更新(读写)
- ‘U’ 通用换行模式(不推荐使用)
读
f = open('./demo1.py', mode='r')
f.read()
f.close()
写
f = open('./test.py',mode='w')
f.write('this is test!')
f.close()
mode = w 仅可写权限,会清空文件,然后在写入数据
即使打开后,不做任何操作,也会清空文件
当文件不存在时,会创建文件
创建新文件,并写入文件,x关键字
f = open('./test1.txt',mode='x')
f.write('test1')
f.close()
mode=x 的话,是不可读的,但是可写的
x 和 w不同的地方就是,x 总是创建新文件,若是文件存在则会抛出错误
追加
f = open('./test1.txt',mode='a')
f.write('a')
f.close()
mode=a 不可读,可写
写入的内容追加到文件的末尾
从读写方面来看,只有r可读不可写,其他的都是可写不可读
从文件不存在来看,只有r抛出异常,其他的都创建文件
从文件存在来看,只有x抛出异常
从是否原始内容来看,只有w会清空文件
读取文件返回值为字符串
f = open('./test1.txt', mode='rt') # mode='rt' 读入的数据是字符串
s = f.read()
f.close()
读取文件返回值为bytes
f = open('./test1.txt', mode='rb') # mode='rb' 读入的数据是bytes
s = f.read()
f.close()
- mode=t 按照字符来操作
- mode=b 按照字节来操作
文件可读可写
f = open('./test1.txt', mode='r+') 实现文件可读可写,mode=r的时候,指针指向0(文件开始)
f.read()
f.write('test')
f.close()
f = open('./test1.txt', mode='w+') 首先清空文件,然后文件可读可写
f.read()
f.write('test')
f.close()
文件追加
f = open('./test1.txt', mode='a') mode=a 的时候,Python指针指向EOF(文件末尾)
f.write('test')
f.close()
单独的 + 是不能工作的,mode里必须有且仅有 rwxa 中的一个
当mode包含 + 时,会增加额外的读写操作,也就说原来是只读,会增加可写的操作,原来是可写,会增加可读的操作,但是 + 不改变其他行为
f = open('./test1.txt')
f.tell() # 获取当前文件内容的指针位置,默认是r,因此默认指针是0,文件读取后,指针就到文件末尾了
f.seek(4,0) # 一定指针,从指针0到指针4
f.close()
mode = t
- 按照字符移动文件指针
- 当whence为start(0)默认值, offset可以是任意整数
- 当whence为current(1)或者end(2),offset只能为0
当seek超出文件末尾,不会有异常,tell也会超出文件末尾,但是写数据的时候,还是会从文件开始写
write 操作从min(EOF,tell()) 处开始。
- 文件指针按照字节操作
- tell方法返回当前文件指针位置
- seek方法移动文件指针
- whence参数START(0), CUR(1), END(2)
- 当mode=t时,whence为seek_cur,或者seek_end, offset只能为0
- 文件指针不能为负数
- 读文件的时候从文件指针(pos)开始向后读
- 写文件的时候从min(EOF, pos)处开始向后写
这方面还有很多细节的东西,但是用到的不多,反正我用到的不多,就不详细记录了