python文件操作

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)
posted @   飞天猪!  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示