昨日内容回顾

+ 文件读写模式
```python
1.r模式默认的只读
	当文件不存在时会报错
2.w 只写
	文件不存在时会添加一个空文档 当文档存在时会清空文档内容等待新的输入
3.a 追加
	文件不存在时会添加空文档 有文件时不会清空 只会在末尾等待新的填写内容
  • 文件的操作模式
1.文本模式 t
默认的操作操作模式
	只能操作文本模式
	必须指定encoding参数(不指定采用计算机默认的参数)
	读写全部以字符串为单位
2.二进制模式 b
	可以操作所有的文件
	不需要指定encoding参数
	读写去阿奴以二进制为单位
  • 文件的诸多方法
read() # 一次性读取所有的文件并且光标会停在末尾 继续读则为空
raeddline # 一次只读一行内容
readlines # 按照行的方式读取所有文件内容并组织成列表的方式返回
readable # 判断文件是否可读
writable # 判断文件是否可写
write # 填写文件内容
writelines # 支持填写容器类型,内部可以存放多个数据值类型
flush # 将内存中文件数据立刻刷到硬盘(相当于主动帮按ctrl+s)

今日内容

  • 文件内的光标移动
1.在文本模式下read的括号内的数字是几就表示读多少个字节
with open(r'a.txt','r',encoding='utf8')as f:
    data =f.read(3)
    print(data)
2.在二进制模式read的括号内数字是几就表示读多少个字节 英文是一个字节,中文三个字节 括号内的数字大于字节会报错
with open(r'a.txt','rb')as f:
    data =f.read(3)
    print(data.decode('utf8'))
  • f.tell() 获取光标自动的字节数
seek(offset,whence)
	offset 控制光标移动的位移量(字节)
	weence模式0,1,2
	0模式的参照物是文件开头的位置
	1模式的参照物是光标当前所在的位置
	2模式的参照物是文件末尾的位置,应该倒着移动
注:1和2只能在二进制模式下使用 0无所谓
  • 文件内数据修改
"""机械硬盘的储存数据原理
	1.数据的修改 其实就是覆盖写
	2.数据的删除 占有态自由态
"""
文件对应的是硬盘空间,硬盘不能修改对应着的文件
数据的修改 覆盖写将原来的覆盖后在重新写入
  • 修改方式一
覆盖写
先读取文件内容到内存 在内存中完成修改 之后w模式打开该文件写入
with open('a.txt', 'r', encoding='utf8') as f:
    data = f.read()
new_data = data.replace('你好', '不好')
with open(r'a.txt', 'w', encoding='utf8') as f1:
    f1.write(new_data)
优点是占用硬盘一块空间
缺点是数据量比较大的时候会造成内存爆满
  • 修改方式二
重命名
先文件内容读取至内存 在内存中完成修改 之后在保存到另外一个文件中 再将原文件删除 将新的文件重命名为原文件
import os

with open('a.txt','r',encoding='utf8') as read_f,\
        open('.a.txt.swap','w',encoding='utf8')as wrife_f:
    for line in read_f:
        wrife_f.write(line.replace('你好','我好'))
os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')
优点是不会造成内存溢出
缺点是可能有那么一段时间需要占用两个硬盘空间 也可能是在内存没刷在硬盘
 posted on 2022-06-30 23:13  Joker_Ly  阅读(114)  评论(0)    收藏  举报