一、文件操作
1.1 文件操作三部曲
- 打开文件
- 对文件句柄进行相应的操作
- 关闭文件
1.2 、文件的功能模式
- 读,四种模式,r rb r+ r+b
- 写,四种模式 , w wb w+ w+b
- 追加,四种模式, a ab a+ a+b
- 相映的功能,对文件句柄的操作,read , read(n) , readlines() , write(), tell() 、seek() flush
二、读取文件
2.1、读取文件所有内容
f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
content = f1.read()
print(content)
f1.close()
# open 内置函数
# f1,变量,文件句柄,对文件的任何操作都得通过文件句柄完成,在内存当中只占用一行文件的数据
# encoding 可以不写,不写得默认编码本是操作系统得默认编码
# f1.close()关闭文件句柄
2.2、按照字符读取
f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
content = f1.read(5) # 读取光标后五个字符
print(content)
f1.close()
2.3、按照行读取
f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
print(f1.readline())
print(f1.readline())
f1.close()
f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
print(f1.readlines())
f1.close()
# f1.readline() 逐行读取
# f1.readlines() 返回一个列表,列表中的每个元素是源文件的每一行
2.4、for循环逐行读取文件
f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
for line in f1:
print(line)
f1.close()
2.5、 rb,操作非文本的文件,如图片,视频,音频
f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
content = f1.read()
print(content)
f1.close()
三、文件写入操作
3.1、w 写入模式
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
# 如果文件存在,先清空源文件内容,在写入新内容,如没有则新创建
3.2、wb写入模式,非文本文件
f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
content = f1.read()
# print(content)
f1.close()
f = open('bb.jpg',mode='wb')
f.write(content)
f.close()
# 以二进制读取aa.jpg图片,再将读取后的二进制写入到bb.jpg形成新图片文件
3.3、a 追加内容
f = open('bb.txt',encoding='utf-8',mode='a')
f.write('我最帅')
f.close()
# 没有文件创建文件,追加内容,有文件再文件末尾追加内容
3.4、r+ 读写,先读后写,在光标后添加内容
f = open('bb.txt',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('我最帅')
f.close()
四、其他功能
4.1 、tell() 获取光标的位置,单位为字节
f = open('bb.txt',encoding='utf-8',mode='r')
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()
4.2、 seek() 调整光标的位置
f = open('bb.txt',encoding='utf-8',mode='r')
f.seek(82) #移动光标的82字节的位置
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()
4.3、flush 强制刷新
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.flush()
f.close()
# 在write后跟一个flush强制保存
五、with 打开文件的另一种方式
with open('bb.txt',encoding='utf-8',mode='r') as f:
print(f.read())
with open('bb.txt', encoding='utf-8', mode='r') as f, open('文件的写', encoding='utf-8', mode='w') as f1:
print(f.read())
f1.write('我最帅')
# 优点,不用每次手动关闭文件,可以同时操作多个文件
六、文件的修改操作
-
以读得模式打开源文件
-
以写得模式创建一个新文件
-
将源文件的内容读出来修改成新内容,写入新文件
-
将源文件删除
-
将新文件从命名成源文件
# low版,缺点是同时加载文件所有内容,文件太大是,内存会比较紧张
import os
# 1. 以读得模式打开源文件
# 2. 以写得模式创建一个新文件
with open('bb.txt',encoding='utf-8',mode='r') as f,
open('bb.txt_bak',encoding='utf-8',mode='w') as f1:
# 3.将源文件的内容读出来修改成新内容,写入新文件
old_content = f.read()
new_content = old_content.replace('我最帅','我牛逼')
f1.write(new_content)
# 4. 将源文件删除
# 5. 将新文件从命名成源文件
os.remove('bb.txt')
os.rename('bb.txt_bak','bb.txt')
# 改进版, 逐行循环,逐行修改
import os
# 1. 以读得模式打开源文件
# 2. 以写得模式创建一个新文件
with open('bb.txt',encoding='utf-8',mode='r') as f,
open('bb.txt_bak',encoding='utf-8',mode='w') as f1:
# 1.将源文件的内容读出来修改成新内容,写入新文件
for line in f:
# 逐行循环,逐行修改
new_line = line.replace('我牛逼','我最帅')
f1.write(new_line)
os.remove('bb.txt')
os.rename('bb.txt_bak','bb.txt')