day09_文件操作
文件打开方式
三种模式
# r 只读,文件必须存在
# w 只写(清空),有文件则清空打开,无文件则新建
# a 追加写,有文件则打开,并将光标定位到文件末尾,无文件则新建
# a+ 可读可写
# w+ 可读可写(清空),无文件则新建
# a+ 可读可写(追加写),无文件则新建
fr = open('user_info.txt','a',encoding='utf-8')
print(fr.readable()) # 判断是否可读
fr.read() # 无参数,默认读取整个文件,有参数则读取指定字符个数
fr.readline() # 从光标所在位置,读取一行
fr.readlines() # 从当前光标位置,读取所有行,以列表方式存储
fr.close # 关闭操作系统与python打开文件所占的内存
fw = open('user_info.txt','w',encoding='utf-8')
print(fw.writeable()) # 判断是否可写
fw.write(s:str) # 必须有参数,并且只能是字符串,写入文本
fw.writelines(lines:iterable[AnyStr]) # 将只包含字符串的可迭代对象中的元素逐个取出,写入同一行
fw.close
fa =open('users_info.txt','a',encoding='utf-8')
print(fa.writeable()) # 判断是否可写
fa.write(s:str) # 必须有参数,并且只能是字符串,写入文本
fa.writelines(lines:iterable[AnyStr]) # 将只包含字符串的可迭代对象中的元素逐个取出,写入同一行
fa.close
两种方式
不单独使用,与r,w,a,r+,w+,a+
连用
文本文件t
一般省略,打开文本文件,如txt
音频文件b
打开音频文件,如mp4,npg,jpg等,没有字符编码
只能读取二进制文本
写入时,需转换成二进制才行
fr = open('users_info.jpg','rb')
data = fr.content
print(data)
fw = open('uses_info.jpg','wb')
fw.write(data)
fr.close
文件管理
由于每次打开文件都套添加f.close()
关闭文件,比较麻烦,所以设计了新的语法格式,with open() as f:
在缩进内的代码不会关闭文件,在缩进之外,自动关闭操作系统对文件的内存调用
with open('users_info.txt','a',encoding='utf-8') as fa:
fa.write('hahaah')
修改文件的两种方式
同时打开两个文件
with open('users_info.txt','r',encoding='utf-8') as fr,\
open('users_info_swap.txt','w',encoding='utf-8') as fw:
# 读写方式一
data = fr.read() # 全部读取,遇到文件较大时,会比较消耗内存,并且耗时
fw.write(data) # 一次性写入,遇到文件较大时,会比较消耗内存,并且耗时
# 读写方式二
for line in fr: # 逐行读入
fw.write(line) # 逐行写入
import os
os.remove('users_info.txt') # 删除原文件
os.rename('users_info.swap.txt','users_info.txt') # 将缓存文件改名为原文件名
先后打开同一个文件
with open('users_info_txt','r',encoding=utf8) as fr:
data = fr.read()
with open('user_info.txt','w',encoding='utf8') as fw:
fw.write(data)