八、文件的基本操作
1. 打开文件
open 内置函数(open底层调用的是操作系统的接口)
语法:f = open('路径', encoding='编码', mode='模式')
- f:变量名,文件句柄(命名:f_h、file_handler)
- 路径:文件的地址,可能报错原因如下:
- 文件名不能使用数字
- 文件编码解码不一致
- 路径的反斜杠与字母转义
- 需要双反斜杠再转义
- 字符串前加r,声明路径
- encoding:指定打开编码,默认操作系统的编码
- windows:gbk
- linux:utf-8
- mac:utf-8
- mode:文件的打开方式,默认以读的模式
2. 文件的操作步骤
- 打开文件,并赋值给一个文件句柄
- 对文件句柄操作
- 关闭文件
注意:文件在同一目录下称相对路径,可仅输入文件名
f = open('H:\你好.txt', encoding='utf-8', mode='r') # 打开文件
print(f.read()) # 输出读取的文件
f.close() # 关闭文件
3. 文件操作模式
b(rb,wb,ab)模式:以bytes方式打开,操作非文本文件,读取到的内容是字节类型,写入时也需要提供字节类型(图片、视频、音频)不用加 encoding='utf-8'
r 读模式(默认)
- r:读取
- rb:以bytes模式读
- r+:读取并追加(先读后写)
w 写模式
文件不存在,创建文件写入;文件存在,清空内容再写入
注意:文件没关闭前写入的每条都会存在,文件关闭后再重新再打开写入,才会覆盖
-
w:写入
-
wb:以bytes模式写入
-
w+:写入并读取(先写后读)
a 追加模式
文件不存在,创建文件写入;文件存在,在原文件的最后面追加内容
- a:追加
- ab:以bytes模式追加
- a+:以读的方式打开,并将光标移到文件尾部
4. 文件操作的功能
-
读取
- 全读:
read()
- 指定读取字符数量:
read(n)
- 文件打开方式为文本模式时,代表读取n个字符
- 文件打开方式为b模式时,代表读取n个字节
- 读取一行:
readine()
(自带换行) - 返回列表:
readlines()
(列表中的每个元素是源文件的每一行) - for循环:每次循环读一行,在内存中只占一行的内存(大文件)
- 全读:
-
写入:
write('内容')
-
光标操作
注意:隐藏的换行
/n
要占两个字节-
获取光标的位置:
tell()
(单位:字节) -
调整光标的位置:
seek(偏移量,起始点)
(单位:字节)- 偏移量:需要移动偏移的字节数,负数表示从倒数第几位开始
- 起始点:表示要从哪个位置开始偏移,0表示从头,1表示当前位置,2表示结尾,默认值为 0
返回值:操作成功,则返回新的光标位置;如果操作失败,返回 -1
-
-
强制刷新:
flush()
一般情况下,文件关闭后会自动刷新缓冲区,但有时需要在关闭前刷新
copy工具
f = open('图1.jpg', mode='rb') # 打开文件
content = f.read() # 读取文件
f.close() # 关闭文件
f1 = open('图2.jpg', mode='wb') # 创建并写入
f1.write(content) # 写入赋值,完成复制
f1.close() # 关闭文件
5. 上下文管理
语法:with open语句, open语句:
- 可同时打开多个文件进行操作,以逗号分隔(\续航符)
- 不用手动关闭文件句柄(一定时间自动关闭)
with open('文件的读',encoding='utf-8') as f1,\
open('文件的写',encoding='utf-8',mode='w')as f2:
data = f1.read() # 读取
f2.write(data) # 写入
6. 文件的改
原理:
- 以读的模式打开原文件
- 以写的模式创建一个新文件
- 将原文件的内容读出来修改成新内容,写入新文件
- 将原文件删除
- 将新文件重命名成原文件
import os # 导入os模块
with open('文件的改',encoding='utf-8') as f1,\
open('文件的改.bak', encoding='utf-8', mode='w') as f2:
# 将原文件的内容读出来修改成新内容,写入新文件
for line in f1:
new_line = line.replace('SB', 'alex')
f2.write(new_line)
os.remove('文件的改') # 将原文件删除
os.rename('文件的改.bak', '文件的改') # 将新文件重命名成原文件
© 版权声明
文章版权归作者所有,未经允许请勿转载。
文章版权归作者所有,未经允许请勿转载。
THE END