day08 文件操作
今日主要内容
1. 文件操作 open() 文件句柄
open()打开一个文件, 获取的是文件句柄
read() : 一次性全部读取 返回字符串 (正常情况下不用) read(n) 读取n个字符
readline(): 读取一行数据 返回字符串 常搭配 strip() 去除"空白"内容 读取文件
readlines() : 一次性全部读取 返回列表 (正常情况下不用)
write() : 写入
for line in f: 遍历文件中的内容
路径的问题:
1. 绝对路径 : 从磁盘根目录寻找 多用于运维 当文件路径固定的时候
2. 相对路径 : 从当前程序运行的文件夹内寻找 用得多 ../表示上一层目录
注意: 打开路径文件路径时 前面加 r 消除目录有\n \t (转义字符) 的影响
2. 文件操作的相关模式Mode
适用于文本文件:
r: 只读
w: 只写 可以创建文件
掌握文本文件复制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
f1 = open(r'c:/日记本.txt', mode='r', encoding='utf-8') f2 = open(r'e:/日记本.txt', mode='w', encoding='utf-8') for line in f1: f2.write(line) f1.close() f2.close()
a: 追加
r+: 读写模式 坑1: 必须先读取,再写入 坑2: 不论你读取多少内容。再次写入的时候都是在末尾
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 正常的 # f = open("person", mode="r+", encoding="utf-8") # content = f.read() # f.write("黄蓉") # 在末尾写入 # print(content) # 错误的示范 # f = open("person", mode="r+", encoding="utf-8") # f.write("杨千桦") # 默认如果直接写入的话。 在开头写入。 覆盖开头的内容 # content = f.read() # print(content)
w+: 写读模式 坑:写入东西之后, 光标在末尾 ,读取不到内容
a+: 追加写读模式 坑: 不论光标在何处 写入的时候都是在末尾
下面的适用于非文本文件 b - bytes 读取和写入的是字节 , 用来操作非文本文件(图片, 音频, 视频)
rb wb ab 不需要指定打开文件的编码
掌握复制照片
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 把胡一菲从c盘复制到d盘, 单纯的从bytes角度来复制的。 适用于所有文件 f1 = open(r"c:\胡一菲.jpg", mode="rb") f2 = open(r"d:\胡二非.jpg", mode="wb") for line in f1: # 分批量的读取内容 f2.write(line) # open()出来的结果可以使用read或者write. 根据mode来看 f1.close() f2.close()
r+b w+b a+b
3. 相关操作
1. seek()移动光标(重点) 以字节为单移动
seek(0) 开头
seek(0,2) 移动到末尾
2. tell() 获取光标所在的位置
3. truncate() 截断文件 默认从开头截取到光标位置
4. 文件修改
with open(xxx) as 句柄, \
open(xxxxx)as xxx:
不用手动关闭文件句柄
文件修改的步骤
1. 从源文件中读取数据。
2. 写入到副本文件中
3. 删除源文件
4. 把副本重命名成源文件
import os
os.remove()
os.rename()