文件操作

概述

1.文件的概念

就是操作系统暴露给用户操作硬盘的快捷方式,当我们双击一个文件时其实是从硬盘将数据加载到内存,保存文件时其实是将内存中的数据刷到硬盘保存

2.代码打开文件的方式

方式一:f = open(文件路径,读写模式,encoding='utf8')
        f.close()
方式二:with open(文件路径, 读写模式, encoding='utf8') as f1:
        	with子代码块
注意:open方法的第一个参数时文件路径,但是撬棍跟一些字母的组合会产生特殊的含义导致路径查找混乱,所以为了解决该问题我们可以在字符串的路径前面加字母r

文件读写模式

'r'  # 只读模式(只能读不能写)
     文件路径不存在时会直接报错,文件路径存在时则会正常读取文件内容
'w'  # 只写模式(只能写不能读)
     文件路径不存在时会自动创建,文件路径存在时则是覆盖写入(先清空文件内容再写入)
'a'  # 尾部追加模式(文件末尾添加数据)
     文件路径不存在时会自动创建,文件路径存在时则会自动在末尾等待追加数据
ps:
当我们在编写代码的时候 有些部分不知道写什么具体代码 但是也不能空着不写
这个时候可以使用关键字
	pass
	...
只补全语法不执行功能 本身没有任何的含义

文件操作模式

t   # 文本模式
    默认模式
    1.只能操作文本文件
    2.读写时都是以字符为单位
    3.需要指定encoding参数,不写则会默认为当前计算机默认的编码

b   # 二进制模式
    使用时需要自己指定  rb  wb  ab
    1.可以操作任意类型的文件
    2.读写都是以bytes为单位
    3.不需要指定encoding参数,已经是二进制不需要编码

文件的诸多方法

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

文件内光标的移动

文件内光标的移动有两种方式,一种是seek()一种是tell()
seek()使用时需要填写参数,也就是seek(offset, whence)
offset是位移量,以字节为单位
whence是模式,通常有0,1,2三种模式
0是基于文件开头  文本和二进制模式都可以用
1是基于当前位置,只有二进制模式能用
2是基于文件末尾,只有二进制模式能用

实战案例

文件内容实时监控:
有这样一段代码,文件a.txt里面光标移动到末尾后如果后面没有内容则程序一直运行该循环体代码,一旦末尾出现内容,则打印(出现的内容需要以代码的形式写入)
import time
with open(r'a.txt', 'rb') as f:
    f.seek(0, 2)  # 光标移动到文件内容的末尾
    while True:
        line = f.readline()
        if len(line) == 0:
            # 没有内容
            time.sleep(0.5)   # 代码停顿时间
        else:
            print(line.decode('utf8'), end='')

计算机硬盘修改数据的原理

硬盘写数据其实就是在硬盘中刻录数据,数据刻录好以后无法改变,只能在开头或末尾增添或删除数据,当我们需要在中间修改数据时只能把原来的擦除重新写入

硬盘删除数据的原理
不是直接删除而是改变状态 等待后续数据的覆盖才会被真正删除

文件内容修改

方式一:覆盖写入
把原来的删除重新写入
方式二:换地方写入
现在另一个地方写入内容,然后把源文件删除,把新文件命名为源文件
posted on 2023-04-05 20:17  zyg111  阅读(102)  评论(0)    收藏  举报