文件的相关操作
文件内指针的移动
铺垫内容
# 这里需要注意的是文件读取read关键字的参数问题。
# 1.文本模式下,read关键字内部的参数指的是读取的字符数
file_name.read(9) # 即读取文件自开始起的九个字符。
# 2.二进制模式下,括号内的数字代表读取的字节数
# 不同的编码字符所需要的字节数是不同的。unicode所有字符都是两个字节,utf8中文是三个字节、英文是一个字节
指针的移动(seek关键字)
'''read关键字读取文件所有内容后,指针会移动到文件的末尾位置,这是如果需要再次读取文件里的内容就需要让读取的指针移动位置
seek关键字的第二各参数是调整指针在文件中的位置,0是起始位,1是所在位置,2是文件内容的末尾。第一个参数是在第二个参数规定位置向后移动的字节数'''
with open(r'011.txt', 'r', encoding='utf8') as file1:
print(file1.read(3))
file1.seek(3, 0) # 在起始位置向后移动三个字节
print(file1.read(3))
file1.seek(3, 1) # 在所在位置向后移动三个字节
print(file1.read(3).decode('utf8'))
file1.seek(-3, 2) # 在文件的末尾向前移动三个字节
print(file1.read().decode('utf8'))
print(file.tell()) # 获取指针相对于文件开头的位置
注:seek的二个参数为1或者2时,只适用于二进制模式
文件的修改
文件的占有态和自由态
'''
文件的占有态和自由态是指文件在计算机的存储空间里的两种状态。
在机械硬盘里,文件的删除本质上就是其内刻印的数据从占有态到自由态的转变。
如果后来后来的文件存储到该区域的话,会对该区域原来自由态的数据进行覆盖。
这就说明了机械硬盘里的文件是不能从内部更改的,修改的话只有两种方式.
'''
文件的修改
1. 创建新文件,删除旧文件
实现思路:先以读取的方式打开文件,然后以写的方式创建临时文件,然后逐行读取原文件,修改并写入临时文件。然后将原文件删除,把临时文件改名为原文件名
优缺点:优点就是节省内存,缺点就是文件修改过程中会出现两份。
2. 直接覆盖旧文件
实现思路:将文件一次读取到内存,然后修改结束覆盖原文件
优缺点:优点是文件修改时只有一份,缺点就是会占用内存
# 方式一:
with open('011.txt','r', encoding='utf-8') as file1:
data = file1.read()
with open('b.txt', mode='w', encoding='utf-8') as file2:
file2.write(data.replace('中国牛逼', '俄罗斯带劲'))
# 方式二
import os # 加载模块
with open('011.txt', 'r', encoding='utf-8') as read_file1:
open('.011.txt.swap', 'w', encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('中国牛逼', '俄罗斯带劲'))
os.remove('011.txt') # 删除文件
os.rename('.011.txt.swap', '011.txt') # 重命名文件