python文件操作
今日内容概要
-
文件操作
利用python代码的编写来读写文件
1.文件的概念
2.文件的操作方式
3.文件读写模式
4.文件操作模式
5.文件诸多方法
6.文件内容修改
7.文件光标移动
文件操作
1.文件的概念
就是操作系统暴露给用户操作硬盘的快捷方式
eg:双击一个文件,其实是从硬盘将数据加载到内存
ctrl+s保存文件,其实就是将内存的数据刷到硬盘保存
2.代码打开文件的两种方式
方式一:
f = open(文件路径,读写模式,encoding ='utf8'
with 子代码块
PS:with上下文管理好处在于子代码运行结束自动调用close方法关闭资源
"""
open 方法的第一参数是文件路径,并且撬棍和一些字母的组合会产生一些特殊的含义导致路径查找混乱,为了解决该问题可以在字符串的路径前面加字母r
D:\a\n\t
r'D:\a\n\t'
以后凡是涉及到路径的编写,推荐加上r
with还支持一次性打开多个文件
with open ()as f1,open() as f2:
with执行的子代码
"""
文件读写模式
'r' 只读模式:只能读不能写
1.文件路径不存在:会直接报错
with open(r‘b.txt','r',encoding='utf8') as f:
print(f.read())
2.文件路径存在:正常读取文件内容
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read())
'w' 只写模式:只能写不能看
1.文件路径不存在:自动创建
with open(r'b.txt', 'w', encoding='utf8') as f:
pass
2.文件路径存在:先清空文件内容,然后再写进去
with open(r"a.txt",'w',encoding= 'utf8')as f: f.write('先把以前的内容清空删除\n')
f.write('再把新的数据添加进去\n')
PS:换行符是需要自己手动添加的,并且在后续数据读取对比的时候也一定要注意它的存在
'a' 只追加模式:文件末尾添加数据
1.文件路径不存在:自动创建
with open(r'c.txt', 'a', encoding='utf8') as f:
pass
2.文件路径存在:自动在末尾等待追加内容
with open(r'a.txt', 'a', encoding='utf8') as f:
f.write('就在后面添加新的内容')
温馨小提示:
当我们在编写代码的时候,有些部分不知道要写什么具体的代码,但是内容也不能是空着不写,这个时候就可以使用关键字
pass
...
他们只有语法补全功能,本身没有任何的含义
文件操作模式
t 文本模式
默认的模式,我们上面所写的r w a 其实全称是rt wt at
1.只能操作文本文件
2.读写都是以字符作为单位
3.需要指定encoding参数,如果不知道则会采用计算机默认的编码
b 二进制模式(bytes模式)
不是默认的模式,需要自己指定 rb wb ab
1.可以操作任意类型的文件
2.读写都是以bytes为单位
3.不需要指定的encoding参数,因为它已经是二进制模式了,不需要编码
r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
w+ : 可读,可写,文件不存在先创建,会覆盖
a+ : 可读、可写,文件不存在先创建,不会覆盖,追加在末尾
而进制模式与文本模式针对文件路径是否存在的情况下规律是一样的
文件的诸多的方法
1.read()
一次性读取文件内容,并且光标停留在文件末尾,继续读取的话则没有任何内容
并且当文件内容比较多的时候,该方法还可能会造成计算机内存溢出
括号内还可以填写数字,在文本模式下,表示读取几个字符
2.for循环
一行行读取文件内容,避免内存溢出现象的产生
3.readline()
一次只读一行内容
4.readlines()
一次性读取文件内容,会按照行数组织成列表的一个个数据值
5.readable()
判断文本是否具备读数据的能力
6.write()
写入数据
7.writeable()
判断文件是否具备写数据的能力
8.writelines()
接受一个列表一次性将列表中所有的数据值写入
9.flush()
将内存中文件数据立刻刷到硬盘, 相当于 Ctrl+s
文件内光标的移动
with open(r'a.txt','rb') as f :
print(f.read())
f.seek(0,0)
print(f.read())
f.seek(0, 0)
print(f.read())
print(f.read(2).decode('utf8'))
f.seek(-1, 2)
# print(f.tell()) # 返回光标距离文件开头产生的字节数
"""
seek(offset, whence)
offset是位移量 以字节为单位
whence是模式 0 1 2
0是基于文件开头
文本和二进制模式都可以使用
1是基于当前位置
只有二进制模式可以使用
2是基于文件末尾
只有二进制模式可以使用
"""
# print(f.read(3).decode('utf8')