目录
一、文件处理
1.什么是文件处理
修改存储的信息
2.什么是文件
操作系统提供的虚拟概念,存储信息
3.操作系统的流程
1.打开文件
open方式
open ('文件的路径',‘打开方式’,'字符编码格式'):
打开方式有三种:
r 只读模式
w 写入模式,会清空原有的内容,没有则会创建
a 追加内容,在最后加入内容,没有会创建。
文件打开的方式有三种,打开时将打开方式固定打开时的字符编码
2.读取/修改文件
.write() #是写入文件
.read() #读取文件
可以在write()填入想要添加的内容,但控制写入的方式是 r w a模式
3.保存
f.flush() #快速保存,可以不使用
4.关闭文件
f.close() # 告诉操作系统关闭文件
二、文件的打开
1.两种打开模式
t 文本模式
用于文本的操作
b 二进制模式
一般适用图片/视频/音频的保存。
f = open (r'1.txt','rb')
# 打开模式 注意设置为b
以上两种都不能单独使用,需要和r/w/a配合连用,注意编码不需要更改。
2.文件打开的三种方式
读取、写入、追加写入
r模式
r ==》 read ==》 只读
在地址前加r 可以使地址内字符无效化
f = open(r'文件的地址内容','r',encoding='utf-8')
f.write('你好,世界')
#(直接报错 not writable)
仅做了解
readline # 一行一行的读取
readlines # 读取所有行放入列表
如果想循环读出文本内容
for i in f.read(): # 循环出一个一个字符
print(i)
for i in f: # 循环出一行行,节省内存
print(i)
w模式
w==》 write ==》只写(清空原本的文件后写入,如果没有则创建再写)
f = open(r'1.txt','r',encoding='utf-8')
f.write('用心创造快乐')
# 清空文件然后写入
仅做了解
writelines
f.writelines(['abc','edf','gbk'])
# 自动拼接列表元素,一行写入
# abcedfgbk
a模式
追加写入,会在文档末尾写入,不可读
f = open(r'1.txt','a',encoding='utf-8')
f.write('没钱玩你麻痹')
# 在文本最后追加
3.绝对路径与相对路径
绝对路径
从盘符开始,一般是 C;D;
相对路径
执行文件(当前运行的文件)的文件夹下的文件名。
未来的项目尽量使用相对路径。
4.with 管理上下文
with 提供了一个自动关闭文件的方法(解除了操作系统的占用)
with open ('1.py','r',encoding='utf-8') as f:
date = f.read()
# 读取的文件放在python的内存中
print(f.read)
# with 会自动关闭系统占用
可读又可写(仅做了解)
可写可读 r+
# with open('test.py', 'r+', encoding='utf8') as fr:
# # print(fr.readable())
# # print(fr.writable())
# fr.write('高级') # 光标在文件头部,覆盖后面的字符
可写可读 w+ 和 w 没有任何区别
# with open('test.py', 'w+', encoding='utf8') as fw:
# print(fw.readable())
# print(fw.writable())
可写可读 a+ a模式默认光标在尾部
# with open('test.py','a+',encoding='utf8') as fw:
# print(fw.readable())
# print(fw.writable())
# fw.seek(0,0)
# print(fw.read())
# 综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件
三、光标的移动
1.文件指针
文件指针用于标明文件读写的起始位置。
通过移动文件指针的位置,再借助 read() 和 write() 函数,就可以轻松实现,读取文件中指定位置的数据(或者向文件中的指定位置写入数据)。
注意,当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。
2.tell()函数
tell() 函数用于判断文件指针当前所处的位置
file.tell()
file表示文件对象
# 文本a的内容是 http://c.biancheng.net
f = open("a.txt",'r')
print(f.tell()) # 0
print(f.read(3)) # htt
print(f.tell()) # 3
可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,文件指针同时向后移动了 3 个字符的位置
3.seek()函数
seek() 函数用于移动文件指针到文件的指定位置。
file.seek(offset[, whence])
- file:表示文件对象;
- whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
- offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。
文件修改
缓存文件的原理
文件没有修改一说,只有覆盖。(缓存文件的原理)
创建一个新的文件修改,并复制,覆盖旧的文件。
# 同时打开多个文件
with open('1.py','rt',encoding='utf-8') as fr , open('2.py','wt',encoding='utf-8') as fw:
# 用逗号隔开open的两个文件
data = fr.read()
# 读取1(fr)里的内容并赋值变量 data
data = data.replace('快乐','抄袭')
# 这里是修改操作,将字符替换。
fw.write(data)
# 2号文件(fw)写入1号(fr)的内容
# 此时自动创建1.py文件,并写入更改后的1.py内容
import os
# 导入os模块
os.remove('1.py')
# 删除原文件
os.renames('2.py','1.py')
# 重命名新文件