目录
第六篇、文件处理之文件的高级应用
一、可读可写
r+:在后面追加
w+:清空文件的功能是w提供的 更加慎用
a+:a有追加的功能,指针在文件的末尾,没啥用
二、文件内指针移动
需要对文件内的指针移动的操作才能对文件的内容进行修改
硬盘上没有修改的说法,硬盘只能覆盖,新内容覆盖旧内容
with open('36r.txt', 'r+t', encoding='utf-8') as fr:
fr.readline()
fr.write('nick 真衰呀') # 写在文件的最后一行
三、文件的内置方法
seek()
tell()
read(n)
truncate(n)
-
seek()移动指针方法
seek(offset,whence): offset代表文件指针的偏移量,偏移量的单位是字节个数,whence可以写0,1,2;0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾
# seek() with open('36r.txt', 'rb') as fr: print(f"fr.seek(4, 0): {fr.seek(4, 0)}") # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾 # fr.seek(0,2) # 切换到文件末尾
tell()统计从头到当前位置的字符的方法
# tell()
with open('36r.txt', 'rb') as fr:
fr.seek(4, 0)
print(f"fr.tell(): {fr.tell()}")
- read(n)读取从文件到指针当前的所有内容
在b模式,读取到n个字节的内容,不用加encoding参数
在t模式,读取到n个字符的内容
# read()
with open('36r.txt', 'rt', encoding='utf-8') as fr:
print(f"fr.read(3): {fr.read(3)}")
- truncate(n)在t模式(b模式)清空文件的第n个字符(字节)后面的内容**打开文件方式必须可写,不能用w和w+等方法,因为这些方法会清空文件,这个truncate方法要在r+或者a或者a+等模式下用,永远都是从文件内容的开头数起。如果不加参数,就会清空文件
课后练习的测试总结经验
- python 报错:ValueError: binary mode doesn't take an encoding argument
在运行文件操作相关功能时报错:ValueError: binary mode doesn't take an encoding argument
上代码:
>>> fp = open("a.txt","rb+",encoding="utf-8")#rb+操作时不支持指定encoding参数
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: binary mode doesn't take an encoding argument
原因分析:rb+操作时不支持指定encoding参数
解决:
改成如下方法即可
>>> fp = open("a.txt","rb+")#注意:a.txt文件编码格式需为“ANSI”
>>> fp.close()