55-文件的高级应用
一、可读,可写
1.1 r+t 可读,可写
#'wt'
with open('草稿.txt','wt',encoding='utf-8') as fw:
print(fw.readable())
print(fw.writable())
# False
# True
1.2 w+t 可写,可读
#'wt'
with open('草稿.txt','w+t',encoding='utf-8') as fw:
print(fw.readable())
print(fw.writable())
# True
# True
1.3 a+t 可追加,可读
#'wt'
with open('草稿.txt','r+t',encoding='utf-8') as fw:
print(fw.readable())
print(fw.writable())
# True
# True
二、文件内指针移动
假设我们需要在文件内容中间的某一行增加内容,如果使用基础的r/w/a模式实现是非常困难的,因此,我们需要在对文件的指针进行移动
with open('草稿.txt','r+t',encoding='utf-8') as fr:
fr.readline()
fr.write('是的这就是草稿') #写在文件的最后一行
硬盘是哪个没有修改这么一说,只有覆盖,即新的内容覆盖旧的内容
2.1 seek()
seek(offset,whence): offset代表文件指针的偏移量,单位是字节
# seek()
with open('草稿.txt', 'rt', encoding='utf-8') as fr:
print(f"fr.seek(4, 0): {fr.seek(3, 0)}") # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾
# fr.seek(0,2) # 切换到文件末尾
# fr.seek(4, 0): 3
2.2 tell()
tell():每次统计都是从文件开头到当前指针的所在位置
#tell()
with open('草稿.txt', 'rt', encoding='utf-8') as fr:
fr.seek(4,0)
print(f"fr.tell(): {fr.tell()}")
# fr.tell(): 4
2.3 read(n)
只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数
#read
with open('草稿.txt','rt',encoding='utf-8') as fr:
print(f'fr.read(10):{fr.read(10)}')
# fr.read(10):是的这就是草稿
2.4 truncate(n)
truncate(n)是截断工具,所以文件的打开方式必须可写,但是不可以用w或w+的方式打开,因为那样就直接被清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。他的参照物永远都是文件头。并且truncate()不加参数,相当于清空文件
#truncate
with open('草稿.txt','r+t',encoding='utf-8') as fr:
fr.truncate(3)