一、简介

  • Python 文件操作(创建、读取、追加、图片视频读取) 上篇文章中使用的操作方式,只能以 读、创建、追加 3 种模式中任意一种打开文件,不能既写又读,也就是读的模式打开只能读,写的模式打开只能写,这样操作起来就相当不方便。
  • 混合模式
  • r+:读写,能读能写,但都是写在文件的最后,跟追加一样,但是可以通过 seek() 调整光标位置进行调整内容。
  • w+:创建写读,这个功能基本没有意义,创建之后写一段内容,在读出来。
  • a+:追加读,文件一打开光标会在文件尾部,写的数据都是追加的形式。

二、操作

  • 操作内容
中国dzm
xyq
test
  • 简单使用
# 读取文件
f = open('test.txt', 'r+')
# 读取第一行
print(f.readline())
# 获得读取光标位置,并调整写入光标
f.seek(f.tell())
# 写入内容,上面为什么需要调整写入光标?读取跟写入的光标不是一起的,是各用各的,
# 因为 readline() 读取之后,在获取光标,获得的是读取光标位置,
# 写入光标还是在尾部的,所以需要通过 seek() 将写入光标调整到当前的写入光标位置
# 要不然内容就会被追加到尾部,而不是插入到中间指定位置
f.write('zh')

由于硬盘存储机制原因,默认写入只会替换覆盖,比如光标在 10 的位置,现在写入内容 zh,这是 2 个字节,也就是会替换覆盖掉 11、12 位置上的内容:

中国dzm
zhq # 这一行的 11、12 位置就被替换了,这样就不能达到插入内容,或替换内容效果
test
  • 替换内容(其他操作)
    如果想要插入内容或者替换内容,可以避开硬盘的存储机制,也就是全部读出来,调整好了,清空之前的内容,在写进去。
# 读取内容
f = open('test.txt', 'r+')
# 加载到内存
data = f.read()
# 替换内容(或者替他操作)
data = data.replace('test', 'djy')
print(data)
# 需要将光标移动到开始位置
f.seek(0)
# 截断文件,也就是将光标之后的内容全部清空不要了,这样也就达到了清空的
f.truncate()
# 把新内容写回硬盘
f.write(data)
# 关闭
f.close()
中国dzm
xyq
djy