文本操作
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序操作磁盘。
所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的这个接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)
open基本使用
open输入参数
mode:指定文件代开方,如mode='r'
r:只读,文件不存在会抛出异常
w:写入,文件不存在,会自动创建
a:附加,文件不存在,会自动创建
在模式后使用“+”表示同时支持输入、输出操作
r+:读写模式,默认以读模式打开,不会自动创建文件,文件不存在抛出异常
w+:写读模式,默认以写模式打开,会自动创建文件
a+:附加模式
在模式后附加“b”表示以二进制方式打开文件,如:rb、wb、ab、rb+、wb+、ab+
二进制文件,如图片,视频等有自己的编码顺序,和文本编码不同,文本就可以展示
二进制模式,就没encoding一说了
encoding:文本内容写时用何种编码,读取时就用该编码,如encoding='utf-8'
errors:遇到错误编码的处理方式,最简单的是截止忽略,如errors='ignore'
open对象属性与方法
# -*- coding: utf-8 -*-
with open('password', mode='r', encoding='utf-8') as f:
f.read() # 读取文件所有内容,光标移动到文件末尾
f.readline() # 读取一行内容,光标移动到第二行首部
f.readlines() # 读取每一行内容,存放于列表中
f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) # 文本模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) # b模式
f.readable() # 文件是否可读
f.writable() # 文件是否可写
f.closed # 文件是否关闭
f.encoding # 如果文件打开模式为b,则没有该属性
f.flush() # 立刻将文件内容从内存刷到硬盘
f.name # 文件名
f.fileno() # 整型的文件描述符,可用于os模块的read方法等一些底层操作上
read(3)
文件文本模式打开时,代表3个字符
文件r模式打开时,代表3个字节
# -*- coding: utf-8 -*-
with open('password', mode='r', encoding='utf-8') as f:
print(f.read(3)) # 小明:
with open('password', mode='rb') as f:
print(f.read(3)) # b'\xe5\xb0\x8f'
其余的文件内光标移动都是以字节为单位,如seek,tell,truncate
with open('password', mode='r', encoding='utf-8') as f:
f.tell() # 返回光标当前位置,以字节为单位
f.seek(offset[, whence]) # offset表示偏移量,负数文件倒数开始
# whence: 起始位置,0(默认)文件对象的开头,1当前位置,2文件末尾
如何确定长度或大小
文件的可迭代性
Last updated