Ⅰ 文件的打开模式
控制文件读写操作的模式
r 只读操作
只读(默认的):在文件不存在时报错,文件存在时文件指针跳到文件开头
f = open('a.txt', mode = 'rt', encoding = 'utf-8')
.read() 将文件读出来并赋值
.readable() 查询文件是不是可读文件
.writable() 查询文件是不是可写文件
f.close() 关闭文件
w 只写操作
只写:在文件不存在时则创建空文件,文件如果存在则清空,文件指针跳到文件开头
f = open('b.txt',mode = 'wt', encoding = 'utf-8')
.write('需要写入内容\n') \n为换行符
.close() 关闭文件
a 只追加写入操作
只追加写:在文件不存在时则创建空文件,文件存在时也不会清空,文件指针则跳到文件末尾
f=open('c.txt',mode='at',encoding='utf-8')
w与a的异同
相同:在打开了文件不关闭的情况写,连续性的写入,新的内容永远跟在老内容之后
不同:重新打开文件, w 会清空老的内容,而 a 模式会保留老的内容,并且指针跳到文件末尾
Ⅱ 控制文件读写内容的模式
t 读写 str格式
默认的:读写都是以str字符串为单位,一定要指定encoding编码模式
f = open('a.txt', mode = 'rt', encoding='uft-8')
b 读写 bythe格式
读写都是以bytes为单位,一定不能指定encoding编码模式参数
f = open('a.txt', mode = 'rb')
取出的文件是二进制格式,如果要显示的话需要将其解码操作
data = f.read() #将文件赋值给data
data.decode('utf-8') #将文件解码
Ⅲ 补充
r w a
tb必须与rwa联用
+必须与rwa联用:r+ ,w+ ,a+
r+ 用于读写,不创建
w+ 可读可写,创建
a+ 打开文件并追加读写,创建
with open('a.txt') as f: 默认是mode = rt 模式
Ⅳ 文件操作的其他方法
读的相关方法:
with open('a.txt' , mode = 'rt' , encoding = 'utf-8') as f:
.readline() 只读取文档一行数据
.readlines() 读取文件所有数据,包含转义符号\n
写的相关方法:
with open('a.txt' , mode = 'wt' , encoding = 'utf-8') as f:
.write('需要写入的文件') # 此方式将需要保存的数据一次性写入到内存,然后在写入到硬盘中.文件如果大小比较小了还行,几十上百个G之后就不行了,内存放不下了
就用到了for循环写入的方法:for line in lines :
f.write(line) #将分多次写入到硬盘中
f.writeslines('hello')#此功能相当于循环写入,将hello分了五次写入,一次只写入一个字符
for i in range(100):#用range设置写入次数
.write('%s\n' %i) #循环写入%s赋值大法
.flush() #让计算机频繁的往硬盘存数据,不要等待
Ⅴ 控制文件内指针移动
控制文件内指针的移动都是以字节为单位
只有一种特殊情况, t 模式下的read(n) ,代表的是n个字符,此外代表的全都是字节
with open ('f.txt' , mode = 'rt' , encoding = 'utf-8') as f:
data = f.read(6) #读取6个字符从文件开头处
正常情况 :
with open ('a.txt' , mode = 'rb' ) as f:#碰到 b 就不能再使用encoding指定编码格式,因为 b 模式都是二进制数
data = f.read(6) #代表取出6个字节的数据(需要注意英文字符一个字符对应一个字节,中文字符一个字符对应三个字节,如果结束的字节不完整会报错
data.decode('utf-8') #将data用utf-8解码
模式 .seek(n , 模式) # n 代表的移动的字节个数
0 模式==>开头位置
参照文件开头移动(只有0模式可以再t模式下使用,1和2模式只能再b模式下使用
with open ('a.txt' , mode = 'rt' , encoding = 'utf-8' ) as f:
f.seek(5 , 0 ) # 表示 将指针移动到开头后第五个字节,如果打印该结果,前五个字节不会取出 #转义符\n 在文件中算两个字节
1 模式==>当前位置
参照指针当前所在的位置移动
with open ('f.txt' mode = 'rb') as f:
f.seek(3,1) #默认指针再文件开头位置
f.seek(3,1) #经过两次移动3字节之后,指针已经到了第六字节的位置
此模式下结果需要进行编码 print(f.read().decode('utf-8')) #decode 解码#encoding 编码
2 模式==>末尾位置
with open('a.txt' , mode = 'rb' ) as f:
f.seek(0,2) #指针从末尾移动0个字节
f.seek(3,2) #指针从末尾向后移动3个字节,因为后面没有数据所以指针等于没动
f.seek(-4,2) #指针从末尾向前开头移动4个字节
.truncate(n) #从文件开头往后数n个字节保留,其余全部删除
.truncate() #从文件开头往后数指针当前所在位置,其余全部删除. 此代码前如果指针在开头未移动,
网友评论