1、什么是文件
文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口
用户/应用程序(open())
操作系统(文件)
计算机硬件(硬盘)
2、为何要用文件
用户/应用程序可以通过文件将数据永久保存的硬盘中
即操作文件就是操作硬盘
用户/应用程序直接操作的是文件,对文件进行的所有的操作,都是
在向操作系统发送系统调用,然后再由操作将其转换成具体的硬盘操作
3、如何用文件:open()
控制文件读写内容的模式:t和b
强调:t和b不能单独使用,必须跟r/w/a连用
t文本(默认的模式)
1、读写都以str(unicode)为单位的
2、文本文件
3、必须指定encoding='utf-8'
b二进制/bytes
控制文件读写操作的模式
r只读模式
w只写模式
a只追加写模式
+:r+、w+、a+
linux系统默认utf-8
windows系统默认gbk
4.模式解读
1、r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置
2.1 w模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置,2, 在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是跟在旧的之后,3 , 如果重新以w模式打开文件,则会清空文件内容.
3、a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接调到末尾
案例:w模式用来创建全新的文件
# 文件文件的copy工具
src_file=input('源文件路径>>: ').strip()
dst_file=input('源文件路径>>: ').strip()
with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,\
open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
res=f1.read()
f2.write(res)
5.文件·指针
指针移动的单位都是以bytes/字节为单位
f.seek(n,模式):n指的是移动的字节个数
模式
模式0:参照物是文件开头位置:
f.seek(9,0)
f.seek(3,0) # 3
模式1:参照物是当前指针所在位置
f.seek(9,1)
f.seek(3,1) # 12
模式2:参照物是文件末尾位置,应该倒着移动
f.seek(-9,2) # 3
f.seek(-3,2) # 9
# 强调:只有0模式可以在t下使用,1、2必须在b模式下用
应用
import time
with open('access.log', mode='rb') as f:
# 1、将指针跳到文件末尾
f.read() # 错误
f.seek(8,1)
while True:
line=f.readline()
if len(line) == 0:
time.sleep(0.3)
else:
print(line.decode('utf-8'),end='')
6.例子
1.with open('g.txt',mode='a+t',encoding='utf-8') as f:
print(f.read())
2.
with open('aaa.txt',mode='rb') as f:
f.seek(1,0)
f.seek(3,0) # 3
print(f.tell())
f.seek(4,0)
res=f.read()
print(res.decode('utf-8'))
with open('aaa.txt',mode='rb') as f:
f.seek(9,1)
f.seek(3,1) # 12
print(f.tell())
with open('aaa.txt',mode='rb') as f:
f.seek(-9,2)
# print(f.tell())
f.seek(-3,2)
# print(f.tell())
print(f.read().decode('utf-8'))
3.
with open(r'g.txt',mode='rt',encoding='utf-8') as f:
for line in f:
print(len(line),line)
4.
with open('a.txt',mode='rt',encoding='utf-8') as f1,\
open('b.txt',mode='rt',encoding='utf-8') as f2:
res1=f1.read()
res2=f2.read()
print(res1)
print(res2)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通