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)
posted @ 2019-08-01 16:07  祥SHAO  阅读(177)  评论(0编辑  收藏  举报