灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 
"""
1.什么是文件?
操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

为什么操作文件
人或者应用程序需要永久的保存数据

如何用
f = open()
f.read()
f.close()
"""
# 通过python代码操作文件
# r取消转义
# f = open(r'D:\Python项目\day07\a.txt',encoding='utf-8') # 向操作系统发送请求 打开某个文件
# # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
# print(f) # f是文件对象
# print(f.read()) # windows操作系统默认的编码是gbk
# f.read() # 向操作系统发请求 读取文件内容
# f.close() # 告诉操作系统 关闭打开的文件
# print(f)
# print(f.read())


# 2.文件打开的模式
r 只读模式
w 只写模式
a 追加写模式
操作文件单位的方式
t 文本文件 t在使用的时候需要指定encoding参数
如果不指定 默认是操作系统的默认编码
注:b 二进制 一定不能指定encoding参数
"""
# mode参数 可以不写
不写的话默认是rt 只读的文本文件
这个t不写默认就是t


# 格式
with open(r'D:\面试整理\重新开始\2.字符编码和文件(7-8)\8.文件模式',mode='r',encoding='utf-8')as f:

print(f.readable()) # # 是否可读
print(f.writeable()) # 是否可写

print(f.read()) # 一次性将文件内容全部读出

with open(r'D:\面试整理\重新开始\2.字符编码和文件(7-8)\8.文件模式',mode='rb') as f: # b 一定不可以设置encode
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(f.read()) # 一次性将文件内容全部读出

# r模式在打开文件的时候 如果文件不存在 直接报错
# 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下

# with open(r'a.txt',mode='r',encoding='utf-8') as f:
# with open(r'a.txt','r',encoding='utf-8') as f1: mode关键字可以不写
# print(f.readable()) # 是否可读
# print(f.writable()) # 是否可写
# print(">>>1:")
# print(f.read()) # 一次性将文件内容全部读出
# print('>>>2:')
# print(f.read()) # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
# print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容
# for line in f: # f可以被for循环 每for循环依次 读一行内容
# print(i) # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
# print(f.readline()) # 只读取文件一行内容
# print(f.readline())
# print(f.readline())
# print(f.readline())


# 其他模式补充
r+
w+
a+
文件内光标移动
在rt模式下read内n表示的读取字符的个数
其他情况及其他方法内n表示都是字节数
f.read(n)
f.seek(offset,whence)
offset:指定光标的偏移量
whence:模式
0:相对于文件开头 t和b下都可以正常使用
1:相对于光标所在的当前位置 只能在b模式下使用
2:相对于文件末尾 只能在b模式下使用

牢记:中文在utf-8中用3个bytes表示,英文用一个bytes

检测文件是否被修改
打开文件 利用f.seek(0,2)将光标移动到文件末尾
利用while循环
再利用readline()来读取末尾内容
在通过if判断看readline()是否有值,有值说明文件新增了内容
通过字符串的格式化输出将新增的文件内容输出给检测程序
查看当前光标移动了多少字节
f.tell()
截断文件内容
f.truncate() 括号内输入的数字 表示的是字节数
将内存中的文件内容直接刷到硬盘
f.flush()

硬盘删除的数据原理

文件修改
两种方式
第一种将文件内容先读取到内存在内存中完成修改,然后重新覆盖原文件
优点:硬盘上始终只有一个文件
缺点:内存很有可能会溢出 当文件内容过大的情况下
第二种重新创建一个新的文件,将老文件的内容一行行读入内存完成修改
直接写到新的文件中,利用os模块将原文件删除,将新文件的名字改为来文件的名字
优点:内存中始终只有文件的一行内容 不占用内存
缺点:硬盘上在某一时刻会出现两个文件



posted on 2022-03-24 14:00  没有如果,只看将来  阅读(36)  评论(0编辑  收藏  举报