文件操作
-
文件操作 就是 操作文件
-
文件操作的作用: 持久化存储
1.file = 路径
2.mode = 操作文件的方式
r只读文本 w清空写文本 a追加写文本 ######
rb只读字节 wb清空写字节 ab追加写字节 ###
3.encoding = 文件的编码
4.文件句柄(变量名f)
一、r: 读
-
f = open("test",mode = "r",encoding = "utf-8")
-
打开 通过python向操作系统发送指令
-
文件读取时只能读一遍,执行第二遍的时候是空的
#print(f.read( )) #全部读取 print(f.read(3)) #模式的r的情况下按照字符读取 print(f.readline().strip) #读取一行 print(f.readlines()) #读取多行,以列表的形式存储 输出结果是列表形式
-
路径:
-
相对路径:相对与当前运行的文件目录
-
import os print(os.getcwd( )) #工作路径(当前py文件的父级目录路径)
-
绝对路径:从磁盘根部开始查找的就是绝对路径
-
-
转义
-
- 普通的
-
- r"C:Python estxxxx" 防止路径中出现,换行符,空格之类的,导致计算机误认为指令
-
f = open(r"C:Python estxxxx",mode="r",encoding="utf-8") a = f.read() print(a)
-
-
rb 读字节 --- 爬虫 读取出来的全部是字节码
f=open("test.text","rb",encoding="utf-8") print(f.read()) 报错! ValueError: binary mode doesn't take an encoding argument 因为rb(rb+)操作时不支持指定encoding参数 所以不写encoding 如下方式 f = open("2.png","rb") print(f.read())
二、 写
-
w 清空写:有文件时清空文件,没有文件时创建文件
1.打开文件时自动清空文件内容
2.写入内容
-
f = open("test","w",encoding="utf-8") f.write("今日是好日,明日会更好") f.flush() # 刷新 f.write("明日是好日,后日会更好.") f.close() # 关闭文件 打开文件,操作文件,关闭文件
-
wb : 清空写字节 爬虫
-
f = open("1.png","wb") f1 = open("2.png","rb") f.write(f1.read())
-
三、追加
-
追加a 一直在文件的末尾进行添加
f = open("test","a",encoding="utf-8") f.write("wdadwa")
-
ab追加写字节
f = open("1.png","wb") f1 = open("2.png","ab") f.write(f1.read()) 在f末尾追加f文本内容字节
四、其他
-
+操作
-
r+ 读写 可读可写
特殊的操作:
先读后写, 写的东西在test原来存在的内容后面添加 f = open("test","r+",encoding="utf-8") a = f.read() f.write("这是读写啊") 可读可写 #如果只“r”的话,f.write()会报错io.UnsupportedOperation: not writable 不支持写 如果先写后读,会覆盖之前写的内容 f = open("test","r+",encoding="utf-8") f.write("这样读取之后写入的内容会覆盖之前的内容") f.seek(0,0) #移动光标 移动到文件头部 a = f.read() 因为是先写的,所以光标在末尾,如果不移动光标到头部,读取不到内容 (这样跟w+没有什么区别了就,所以尽量使用r+先读后写)
-
w+ 清空写,读
f = open("test","w+",encoding="utf-8") f.write("哈哈哈") f.seek(0,0) #移动光标 移动到文件头部 print(f,read()) 如果不seek移动光标会读不到内容
-
a+:追加写,读
f = open("test","a+",encoding="utf-8") f.write("呵呵") f.seek(0,0) #移动光标 移动到文件头部 print(f.read()) 就是先写后读,写的内容追加到末尾,然后再读都能读到,而w+是清空,读只能读到写入覆盖后的内容,a+就像r+和w+的结合体
# 最常用的是:r,w,a a+(没文件时) r+(覆盖一些内容)
# 光标
# f = open("test","r",encoding="utf-8")
# f.seek(0,0) # 移动文件头部
# f.seek(0,1) # 移动到光标当前位置
# f.seek(0,2) # 移动到文件末尾
# f.seek(3) # 移动3个字节,根据编码不同决定移动的字节大小
# print(f.read())
# print(f.tell()) # 查看光标 返回的是光标位置之前内容字节的数量
with open
特点:
1 自动关闭文件
2 可以同时操作多个文件
as 起别名
with open("test1","r",encoding="gbk") as f,
open("test","r",encoding="utf-8")as f1:
print(f.read())
print(f1.read())
文件的修改
"w"没文件的时候创建文件
with open("test", "r", encoding="utf-8")as f,
open("test1", "w", encoding="utf-8")as f1:
for i in f:
f1.write(i.replace("嘿嘿", "sb"))
f1.flush()
import os
os.rename("test","test2")
os.rename("test1","test") 源文件test给了test2,(一个暂时不存在的) 修改过的test1给了test