文件
什么是文件?
操作系统提供给你操作硬盘的一个工具
为什么要用文件?
因为人类和计算机要求永久保存数据
怎么用文件?
open("要打开的文件的相对路径/绝对路径") #注意要加后缀名
在这里要说一下相对路径和绝对路径
相对路径:必须与当前py文件在同一及目录下,如下图打开a.txt,在这里a.txt和test.py是在同一级目录下
绝对路径:文件所在的目录到很目录的全部地址
with open(r'E:\python\project001\day07\a.txt',mode='r',encoding='utf-8')as rf: print(rf.read())
# f = open("a.txt") # # print(f.readable()) # 判断当前文件是否可读 # print(f.writable()) # 判断当前文件是否可写 # # # del f # 回收变量资源 # f.close() # 回收操作系统的资源
with会自动帮你回收操作系统的资源,无需自己操作
with open('a.txt',mode='r')as rf,open('a.txt',mode='w')as wf: # with会自动帮你回收操作系统的资源,无需自己操作 print(rf.readable()) print(wf.writable()) 打印结果: True True
rb:read bytes 把文件转换为二进制读出来
with open(r'th.jpg','rb')as f,open(r'b.png','wb')as wf: wdx = f.read() wf.write(wdx) print(wf.write(wdx))
打开文件的模式
r模式:只读,如果文件不存在,会报错
with open(r'dir\a.txt','r',encoding='utf-8')as f: print(f.readable()) print(f.readline()) # 执行一次,打印一行内容 print(f.readlines()) #一次性读取整个文件内容,并按行返回到list,方便我们遍历 print(f.read())
w模式:只写,如果文件不存在,则新建文件,如果文件存在数据,会将数据清空,重新写入(慎用!)
with open(r'dir\a.txt','w',encoding='utf8')as f: print(f.writable()) f.write('我贼帅!!')
a模式:追加写,如果文件内存在数据,会在已有数据后边追加数据,如果文件不存在,则新建文件
with open(r'dir\a.txt','a',encoding='utf8')as f: f.write('\n对!我非常帅!!')
r+:可读可写,如果文件不存在,报错,正在写的内容不显示,写完才会显示
with open('a.txt','r+',encoding='gbk') as f: f.write('我好帅I am handsome\n') print(f.read())
这时打印是不显示的,但是a.txt文件里已经写入数据了
w+:可读可写,如果文件不存在,新建文件写入数据,正在写的内容不显示,写完才会显示(覆盖数据,慎用)
注意此时有三条数据,执行以下代码你会发现什么
with open('a.txt','w+',encoding='gbk') as f: f.write('我好帅I am handsome\n') print(f.read())
这时w+模式就会把原来的数据覆盖,所以要慎用!
a+:可读可写,如果文件不存在,新建文件写入数据,读取文件必须自行移动光标
with open('a.txt','a+',encoding='gbk') as f: f.write('我好帅I am handsome\n') print(f.read(2))
文件内的光标移动
f.seek
f.seek有两个参数:offset和whence
offset:相对偏移度(光标移动的位数)
whence:指定光标位置从何开始
whence有三个参数:0,1,2
0:从文件开头
1:从当前位置
2:从文件末尾——这时offset就必须是负数或0
with open('a.txt','r',encoding='gbk')as f: f.seek(0,0) # 光标移动的位数为0,从文件开头 print(f.read()) # 读取a.txt所有内容
f.tell:光标所在的位置
with open('a.txt','r',encoding='gbk')as f: f.seek(6,0) # 光标移动的位数为6,从文件开头 print(f.tell()) # 光标所在位置6 print(f.read(4)) # 读取a.txt中从光标位置起,前四个字符
拓展练习:监视文字输入
新建py文件:输入信息文件
#coding=gbk import time res = time.strftime('%Y-%m-%d %H:%M:%S') with open(r'a.txt','a',encoding='gbk')as f: f.write(f'{res}:马上要学函数了,有点难,怎么办\n')
再建一个py文件:监视文件
#coding=gbk import time with open(r"a.txt", 'r', encoding='gbk')as f: f.seek(0, 2) # 以文件末尾为参照点,移动0位 while True: # time.sleep() res = f.readline() # 一次读一行 if res: # 如果你读出数据了,就执行下面的代码块 print(f'录入记录:{res}') ##PS:需要手动结束循环
文件的修改
修改前a.txt中的数据
with open(r'a.txt','r',encoding='gbk')as f: data = f.read() with open(r'a.txt','w',encoding='gbk')as f: res = data.replace('tank','DSB') f.write(res)
执行完代码后
以上内容就是关于文件的内容