一、简介
-
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