Python第八课 学习笔记
文件操作的初识
-
如何利用python代码写一个软件,去操作文件。
-
文件路径:path
-
打开方式:读,写,追加,读写,写读......
-
编码方式:utf-8,gbk ,gb2312......
-
#打开文件并读取 f1 = open('d:123.txt',encoding='utf-8',mode='r') content = f1.read() print(content) f1.close()
-
-
代码解释:
-
open()内置函数,open底层调用的是操作系统的接口。 f1,变量,f1,fh,file_handler,f_h,文件句柄。对文件进行的任何操作,都得通过文件句柄. 的方式。 encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码 windows: gbk or utf-8 linux: utf-8 mac : utf-8 f1.close() 关闭文件句柄。
-
-
文件操作的三部曲:
- 1、打开文件。
- 2、对文件句柄进行相应操作。
- 3、关闭文件。
-
报错原因:
-
UnicodeDecodeError:文件存储时与文件打开时编码本使用不一致。
-
第二个错误: 路径分隔符产生的问题:
-
解决方式1(加 使转义字符无效) C:\UsersoldboyDesktop123.txt' 解决方式2(加r') r'C:UsersoldboyDesktop123.txt'
-
-
文件操作的读写追加
- r , rb, r+,r+b 四种模式
- r: read()、read(n)、readline()、readlines()
- for循环读
- rb: 操作的是非文本的文件。比如图片,视频,音频。
#.read() 全部读出来
f = open('文件的读', encoding='utf-8')
content = f.read()
print(content,type(content))
f.close()
#.read(n) 按照字符读取,读出n个字符
f = open('文件的读', encoding='utf-8')
content = f.read(5)
print(content)
f.close()
#.readline() 按照一行行读
f = open('文件的读', encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
#.readlines() 返回一个列表,列表中的每个元素是源文件的每一行。
f = open('文件的读', encoding='utf-8')
l1 = f.readlines()
print(l1)
f.close()
#for循环读取(大文件)
f = open('文件的读', encoding='utf-8')
#['12
', '34
', '56
', '78
', '910
']
for line in f:
print(line)
f.close()
f = open('美女.jpg',mode='rb')
content = f.read()
print(content)
f.close()
- 文件操作的写
- w,wb, w+,w+b 四种模式
- wb: 操作的是非文本的文件。比如图片,视频,音频。
# 没有文件,创建文件,写入内容
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点')
f.close()
# 如果文件存在,先清空原文件内容,在写入新内容
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点点')
f.close()
# wb(两个步骤相当于复制一张图片的过程)
f = open('美女.jpg',mode='rb')
content = f.read()
print(content)
f.close()
f1 = open('美女2.jpg',mode='wb')
f1.write(content)
f1.close()
- 文件操作的追加
- a, ab, a+,a+b 四种模式
# 没有文件创建文件,追加内容
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('123456')
f.close()
# 有文件,在原文件的最后面追加内容。
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('654321')
f.close()
- 文件操作的其他模式 r+
# 读并追加 (顺序不能错误。)
f = open('文件的读写', encoding='utf-8', mode='r+')
content = f.read()
print(content)
f.write('人的一切痛苦,本质都是对于自己无能的愤怒。')
f.close()
# 错误示例(先写再读)(utf-8中文三个字节,英文一个字节,先读时换行和标点对不上都会导致乱码和报错)
f = open('文件的读写', encoding='utf-8', mode='r+')
f.write('123456789')
content = f.read()
print(content)
f.close()
文件操作的其他功能
- 总结:三个大方向
- 读 四种模式:r,rb,r+,r+b
- 写 四种模式:w,wb,w+,w+b
- 追加 四种模式:a, ab,a+,a+b
- 相应的功能:对文件句柄的操作:read read(n) readline() readlines() write()
# .tell 获取光标的位置 单位字节。
f = open('文件的读写', encoding='utf-8')
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()
# .seek 调整光标的位置
f = open('文件的读写', encoding='utf-8')
f.seek(7)
content = f.read()
print(content)
f.close()
# .flush 强制刷新(强制保存)
f = open('文件的其他功能', encoding='utf-8',mode='w')
f.write('123456')
f.flush()
f.close()
- 打开文件的另一种方式
# 优点1:不用手动关闭文件句柄
with open('文件的读',encoding='utf-8') as f1:
print(f1.read())
# 优点2:一个语句操作多个文件句柄
with open('文件的读', encoding='utf-8') as f1,
open('文件的写', encoding='utf-8', mode='w')as f2:
print(f1.read())
f2.write('123456')
# 缺点:它是在一定时间内关闭。
-
文件操作的改
-
文件操作改的流程
- 以读的模式打开原文件
- 以写的模式创建一个新文件
- 将原文件的内容读出来修改成新内容,写入新文件
- 将原文件删除
- 将新文件重命名成原文件
-
具体代码:
#简洁版
import os
#1.以读的模式打开原文件。
#2.以写的模式创建一个新文件。
with open('文件操作的改',encoding='utf-8') as f1,
open('文件操作的改.bak',encoding='utf-8',mode='w') as f2:
#3.将原文件的内容读出来修改成新内容,写入新文件。
old_content = f1.read()
new_content = old_content.replace('Jarvis', 'jarvis')
f2.write(new_content)
os.remove('文件操作的改')
os.rename('文件操作的改.bak','文件操作的改')
# 进阶版
import os
#1.以读的模式打开原文件。
#2.以写的模式创建一个新文件。
with open('alex自述',encoding='utf-8') as f1,
open('alex自述.bak',encoding='utf-8',mode='w') as f2:
#3.将原文件的内容读出来修改成新内容,写入新文件。
for line in f1:
new_line = line.replace('Jarvis', 'jarvis')
f2.write(new_line)
os.remove('文件操作的改')
os.rename('文件操作的改.bak','文件操作的改')
# 有关清空的问题:
# 关闭文件句柄,再次以w模式打开此文件时,才会清空。
with open('文件的写', encoding='utf-8',mode='w') as f1:
for i in range(9):
f1.write('12345')