1. 文件读取的三部曲: 打开–> 操作 -> 关闭
打开
f = open('/etc/passwd1')
print(f)
读操作
如果文件打开成功,接下来,调用 read() 方法可以一次读取文件的全部内容;
content = f.read()
print(content)
写操作
f.write("hello")
判断文件对象拥有的权限
print(f.readable()) # True
print(f.writable()) # False
关闭
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源.
f.close()
判断文件对象是否关闭, 已经关闭返回True
print(f.closed)
2. 文件读取模式的选择
r:以读的方式打开,定位到文件开头 , 默认的 mode
- 只能读, 不能写;
- 读取的文件不存在,会报错;
FileNotFoundError: [Errno 2] No such file or directory: '/etc/passwd1'
r+:以读写的方式打开,定位文件开头 , 可以写入内容到文件
- 可以执行读写操作;
- 文件不存在, 会报错;
- 默认情况下, 从文件指针所在位置开始写入;
w:以写的方式打开,打开文件的时候会清空文件的内容,并且不能读
- write only
- 文件不存在, 不报错
- 会清空文件内容
w+:以读写的方式打开,定位到文件头,并且打开文件的时候也会清空文件的内容
- rw
- 文件不存在, 不报错
- 会清空文件内容
a:以写的方式打开,定位到文件的末尾,是一个追加的操作 , 但并不允许读
- write only
- 文件不存在, 不报错
- 不会清空文件内容
a+:以读写的方式打开,定位到文件的末尾,追加的方式。
- rw
- 文件不存在, 不报错
- 不会清空文件内容
非纯文本文件的读取
如果读取图片, 音乐或者视频(非文本文件), 需要通过二进制的方式进行读取与写入;b
- 读取二进制文件
rb; rb+; wb; wb+; ab; ab+;
- 读取文本文件
rt; rt+; wt; wt+; at; at+; 等价于 r; r+; w; w+; a; a+;
先读取二进制文件内容, 保存在变量content里面
f1 = open("frame1.png", mode='rb')
content = f1.read()
f1.close()
print(content)
f2 = open('hello.png', mode='wb')
f2.write(content)
f2.close()
文件常用属性
缓冲区
f = open('/tmp/passwd')
f.buffer
<_io.BufferedReader name='/etc/passwd'>
bufferObj = f.buffer
from collections import Iterable
isinstance(bufferObj, Iterable)
True
for i in bufferObj:
print(i)
f.close()
# 当只是读取文件时, buffer里面没有内容
f = open("/tmp/passwd", 'a+')
f.read()
f.write('123')
3
# 此时写入的内容在缓冲区里面,并没有真正写入磁盘文件
f.buffer
<_io.BufferedRandom name='/tmp/passwd'>
for i in f.buffer:
print(i, end=',')
f.close()
print(f.buffer) # buffer缓冲区对象
文件常用方法
读取文件内容
f = open('/tmp/passwd', 'r+')
f.read():
# 默认情况读取文件的所有内容, 小的文件, 直接用read读取即可