文件的模式和操作

今日内容总结

  • 文件操作
  • 文件读写模式
  • 文件操作模式
  • 文件诸多方式
  • 文件内光标的移动

今日内容详解

文件操作

1.文件的概要
 就是操作系统暴露给用户操作硬盘的快捷方式
2.代码打开文件的两种方式
方式1:
 f = open(文件路径,读写模式,encoding='utf8')
  f.close()
open 方法的第一个参数是文件路径 并且撬棍跟一些字母的组合会产生特殊的含义导致路径查找混乱 
为了解决该问题可以在字符串的路径前面加字母r
r'D\a\n\t'
只要涉及到路径的编写 加上r不会错
 
方式2:
  with open('a.txt','r',encoding='utf8') as f1:
     with 子代码块
  with 上下文管理好处在于子代码运行结束自动调用close方法关闭资源
  with 可以同时打开多个文件
   with open() as f, with open() as f1, with open() as f2:
      子代码

文件读写模式

'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')
    f.write('假期综合征 赶紧要调整\n')
'''强调:换行符需要自己添加 并且在后续数据读取比对的时候也一定要注意它的存在'''
'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.读写都以字节为单位
3.不需要指定encoding参数 本身就已经是二进制模式 不需要编码

文件诸多方法

1.read()
一次性读取文件内容 并且光标停留在文件末尾 继续读取则没有内容
并且当文件内容比较多的时候 该方法还可能会造成计算机内存溢出
​```括号内还可以填写数字 在文本模式下 表示读取几个字符```
2.for循环
一行行读取文件内容 避免内存溢出现象的产生
3.readline()
一次只读一行内容
4.readlines()
一次性读取文件内容 会按照行数组织成列表的一个个数据值
5.readable()
判断文件是否具备读数据的能力
6.write()
写入数据
7.writeable()
判断文件是否具备写数据的能力
8.writelines()
接收一个列表 一次性将列表中所有的数据值写入
9.flush()
将内存中文件数据立刻刷到硬盘 相当于ctrl + s

文件内光标的移动

seek(offset, whence)
     offset是位移量 以字节为单位
     whence是模式   0  1  2
0是基于文件开头
文本和二进制模式都可以使用
1是基于当前位置
只有二进制模式可以使用
2是基于文件末尾
只有二进制模式可以使用
tell() 查看当前光标所在位置
代码如下:
with open(r'b', 'rb') as f:
    print(f.read(4).decode('utf8'))
    print(f.tell())  # 返回光标距离文件开头产生的字节数
    f.seek(3, 1)
    print(f.read().decode('utf8'))
posted @ 2022-10-09 15:22  hugmi男孩  阅读(63)  评论(0)    收藏  举报