文件操作 文件操作 文件的三种打开方式 with管理上下文 文件高级应用 文件的拷贝

文件的基本操作

什么是文件:文件是操作系统提供的虚拟单位,有了文件我们就可以读取数据,如果没有文件就只能从硬盘上自己去扣机械手臂读取

如何使用文件:
1. 打开文件
2. 读写数据
3. 保存
4. 关闭文件

open操作:

我们可以使用open来输入文件路径打开文件

read操作:

read一次性读取文件内的所有数据

readline按行读取文件内的数据,如果读完了所有的数据,继续读取为空

read和readline做出的行为是读取,只能读出一次

close操作:

为了节省内存空间,我们在读取完成后要把文件在操作系统和内存上都关上,del只能删除变量名,在操作系统中文件还是打开占用空间的,所以要使用.close从操作系统中关闭文件

结合
1. 打开文件的一瞬间是在操作硬盘和内存
2. python3是应用程序无法直接操作硬盘和内存
3. 我们看到python3打开文件并操作,这些都是借助了操作系统之手
4. 我们使用del只是在删除变量名在内存中的占用
5. 我们从来没有告诉过操作系统关闭文件
6. 所以我们要使用.close()关闭文件

绝对路径和相对路径

绝对路径:从文件根目录开始,一直到你需要的文件路径

相对路径:从当前文件夹开始到你需要的文件路径,只需要输入文件路径,但要打开的文件必须和运行的py文件在同一个文件夹下

文件的三种打开方式

mode = 'r',代表只能读取

fr = open(r'C:Users一只猫Desktop	est.txt',mode='r',encoding='gbk')
data = fr.read()
print(data)
我
是谁
我是谁
我是谁我
是谁我是谁

mode = 'w',代表只能写入,而且是清空文件再写入

fr = open(r'C:Users一只猫Desktop	est.txt',mode='w',encoding='gbk')
fr.write('哈哈哈哈哈哈哈')
fr = open(r'C:Users一只猫Desktop	est.txt',mode='r',encoding='gbk')
data = fr.read()
print(data)
哈哈哈哈哈哈哈

由于写入和读取不能同时进行,所以我们在写入的代码执行的时候是无法直接读取到文件内容的

mode = 'a',代表在之前的文件后面追加写入文件

fr = open(r'C:Users一只猫Desktop	est.txt',mode='a',encoding='gbk')
fr.write('文件赔付金额欧服文凭')
fr = open(r'C:Users一只猫Desktop	est.txt',mode='r',encoding='gbk')
data = fr.read()
print(data)
哈哈哈哈哈哈哈文件赔付金额欧服文凭

除了上述的三种操作还有两种类型可以与上述三种操作搭配使用

t意思是打开text文本类型
b意思是打开bytes二进制类型

t和b可以与上述的r,w,a搭配组成:

rt(以text文本格式读取),wt(以text文本格式写入),at(以text文本格式追加)

rb(以bytes二进制格式读取),wb(以bytes二进制格式读取),ab(以bytes二进制格式追加)

t和b不能单独使用,只能搭配r/w/a使用,r/w/a可以单独使用

r与b

r:

在上述的代码中我们可以看到open的括号内有一个r,这个r也是有作用的,它是告诉解释器接下来的字符串里所有的特殊字符都是没有意义的不执行语法

b:

b表示后面写的字符串为二进制,在打印的时候不需要使用终端的编码处理,直接打印原生的二进制即可

with管理上下文

格式:

with open(文件路径,打开模式(rt/wt/at/rb/wb/ab),编码格式)as 变量名:

变量名.read/write
with open(r'C:Users一只猫Desktop	est.txt','r',encoding='gbk')as fr:
    data = fr.read()
    print(data)
哈哈哈哈哈哈哈文件赔付金额欧服文凭

文件高级应用

r+/w+/a+都为可读可写,但不推荐使用

with open(r'C:Users一只猫Desktop	est.txt','r',encoding='gbk')as fr:
    print(fr.readable())
    print(fr.writable())
True
False
with open(r'C:Users一只猫Desktop	est.txt','r+',encoding='gbk')as fr:
    print(fr.readable())
    print(fr.writable())
True
True

指针一般不使用指针

with open(r'C:Users一只猫Desktop est.txt','r+',encoding='gbk')as fr:

fr.readline()

fr.seek(3,0)#第一个参数代表字节数,一个汉字3个字节,一个字母或数字1个字节,

            #第二个参数代表光标位置,0为开头,1为目前位置,2为最后
            
print(fr.tell())#告诉你光标当前的位置

print(fr.read)#光标后的字符个数,一个汉字一个字符,一个英文字母或数字也是一个字符

fr.truncate(3)#如果有参数,则光标会跳到指定字节数后,然后把后面的内容全部清空

fr.flush()#快速保存

文件的写入没有插入,只有覆盖

文件的拷贝

文件不能插入内容,但我们有需求要修改文件,那插入的方法是如何实现的呢?

两个程序都想修改一个文件,两者都已经读取文件成功,都拿到了"中"字,某一个程序先动了手修改"中"字为"国",后一个程序在想修改的时候,找"中"字已经找不到,于是就会报错

改进方法:

两个程序都想修改一个文件,两者都拿走一份拷贝文件,各自修改完成后在删除原文件,修改