文件操作
文件的概念
操作系统显示给用户可以直接操作硬盘的快捷方式
代码打开的两种方式:
f = open('s.txt', 'r', encoding='utf8')
f.close() # 关闭打开的文件
with open('c.txt', 'r', encoding='utf8') as f1:
with 子代码
with子代码结束时自动调用close方法关闭资源
"""
第一种方法的第一个参数是文件路径, 在我们写路径为了防止特殊符号,在前面直接加r
"""
open(r'caca.txt') # 相对路径
open(r'F:\pr\py\caca.txt') # 绝对路径
"""with 支持一次性打开多个文件
with open() as f1, open() as f2:"""
文件的读写模式
1. 'r' 只读模式:只能读不能写 # read
# 在路径不存在时,直接报错
# 路径存在时,正常打开文件
"""
able在英语大部分情况下表示的是,具备什么什么的能力
readable 具备读的能力
writeable 具备写的能力
"""
代码:
with open(r'ca.txt', 'r', encoding='utf8') as f1:
print(f1.read())
-----------------------------------------------
2.'w' 只写模式:只能写不能看 # write
# 文件路径不存在时,自动创建。文件路径存在时 先清空文件内容之后在写入
代码操作:
with open(r'ca.txt','w',encoding='utf8')as f1:
f1.write('你看你擦,还不回家\n')
f1.write('你看你擦,还不回家\n')
f1.write('你看你擦,还不回家\n')
print(f1.read())
''' 在多段一起write时,如果不使用分隔符分割,会都在一行里面,不会帮你自动分割,使用我们使用\n分隔符分割段'''
-----------------------------------------------
3. 'a' 只追加模式:文件末尾添加数据
# 路径不存在时,自动创建文件,路径存在时,不会清空文件内容,而是在文件末尾等待新内容的添加
代码:
with open(r'haha.txt', 'a', encoding='utf8') as f1:
f1.write('一giao,wo里giao')
print(f1.read())
"""当我们在编写代码的时候有部分不知道些什么代码 一般使用pass ...关键字 来替代空着不写"""
文件的操作模式
t模式
r - rt , w - wt, a - at
默认是r w a 其实全称是 rt wt at
这个模式只能操作文本,必须指定encoding 参数,读写都是以字符为最小单位
b模式
二进制模式,bytes
rb wb ab 不可以省略b
可以操作任意类型的文件,不需要指定encoding 参数,读写都是以字节为单位
文件的诸多方法
1. read() 一次性读取文件内容
# 在执行完如果光标在末尾继续读取没有内容,
# 文件特别大的时候会造成内存溢出
# 括号内 可以填写数字 在文本模式下 表示读取几个字符
2. for循环 一行行读取文件内容 避免内存溢出
3. readline() 一次只读一行内容
4. readlines() 一次性读取文件内容,结果是一个列表 里面的数据值对应的是每行的内容
5. redable() 判断文件是不是一个可读的
6. write() 写入文件
7. writelines() 一次性将列表中数据值写入文件中
8. writeable() 判断文件是不是一个可写的
9. flush() 保存的意思 相当于ctrl + s
文件的光标移动
ca.txt的内容为:你看你擦
with open(r'ca.txt','r',encoding='utf8')as f:
print(f.read(3)) # 结果为 你看你
# raed在文本模式下,括号内的数字表示的是读取指定的字符个数
with open(r'ca.txt','rb') as f:
print(f.read(3).decode('utf8')) # 结果为 你
# read在二进制模式下,括号内的数字表示的是读取指定的字节数
# utf8中文都是用3字节来表示,英文用1字节来表示
-----------------------------------------------
''' seek(offset, whence)
offset是位移量 以字节为单位
seek中whence位如果没有填写值,默认是0 '''
0 :就是让光标移动到文件开头处
可以支持文本模式和二进制模式
1 :就是让光标停留在当前的位置
只支持二进制模式
2 :就是让光标移动到文件末尾处
只支持二进制模式
caa.txt的内容为:你看你擦
with open(r'haha.txt','r',encoding='utf8')as f:
print(f.read(1)) # 结果为你
f.seek(3,0)
print(f.raed(1)) # 结果为看
print(f.tell()) # 结果为6
# seek可以控制光标的移动,在文本模式下移动的单位也是字节数
seek(offset,whence) # 两个参数格式
offset:用来控制移动的字节数
whence:控制模式