#文件常用操作
-打开关闭(一旦打开,必须要有关闭操作)
-读写内容
-查找
#open函数
-open函数负责打开文件,带有很多参数
-第一个参数:必须有,文件的路径和名称
-mode:表明文件用什么方式打开
- r:以只读方式打开
- w: 以写方式打开,会覆盖以前的内容
- x:创建方式打开,如文件已存在,则报错
- a: 以append方式,追加对文件内容的写入
- b: binary方式,二进制方式写入
- t: 以文本方式打开
- +: 可读写
#打开文件,用写的方式
#r表示后面字符串内容不需要转译
#f称为文件句柄
f = open(r"test01.txt","w")
#文件打开后必须关闭
f.close()
#此案例说明,以写方式打开文件,如果没有,则会自动创建
#with语句
-with语句使用的是一种上下文管理协议的技术(Context Management Protocal)
-自动判断文件的作用域,自动关闭已经打开的文件
#with语句案例-1
with open(r"text.01","r") as f:
pass
#下面语句块开始对f进行操作
#在本模块中不需要再用close关闭文件了
#with语句案例-2
with open(r"text.01", "r") as f:
#按行读取内容
strline = f.readline()
#此结构能够保证完整读取文件直到结束
while strline:
print(strline)
strline = f.readline()
#list能用打开的文件作为参数,把文件每一行内容都作为一个元素全部读取
with open(r"text.01", "r") as f:
#以打开的文件f作为参数,创建列表
l =list(f)
for line in l:
pring(line)
#read是按字符读取文件内容
#允许输入参数决定读取几个字符,如果没有指定,则从当前位置读取到结尾
#否则,从当前位置读取指定的字符
with open(r"text.01", "r") as f:
strChar = f.read()
print(len(strChar))
print(strChar)
#seek(offset,from)
-移动文件的读取位置,也叫读取指针
-from的取值范围:
- 0: 从文件开始偏移
- 1:从文件当前位置开始偏移
- 2:从文件末尾开始偏移
-移动的单位是字节(byte)
-一个汉子由3个字节构成
#seeka案例
#打开文件后,从第5个字节开始读取
#打开读写指针在0处,即文件的开头
with open(r"text.01", "r") as f:
#seek移动单位是字节
f.seek(6,0)
strChar = f.read()
print(strChar)
#关于读取文件的练习
#打开文件,三个字符一组读出内容,然后显示在屏幕上
#每读取一次,休息一秒钟
import time
with open(r"test01.txt", "r") as f:
strChar = f.read(3)
while strChar:
print(strChar)
strChar = f.read(3)
time.sleep(1)
#tell函数:用来显示文件读写指针的当前位置
with open(r"test01.txt", "r") as f:
strChar = f.read(3)
pos = f.tell()
while strChar:
print(pos)
print(strChar)
starChar = f.read(3)
pos = f.tell()
#tell函数返回的数字是以字节为单位的
#read是以字符为单位的
#文件的写操作-write
-write(str):把字符串写入文件
-writelines(str):把字符串按行写入文件
-区别:
-write函数的参数只能是字符串
-writelines函数的参数可以使字符串,也可以是字符序列
#write案例
#1.向文件追加内容
#a代表追加方式代开
with open(r"test01.txt", "a") as f:
f.write(“pangqi shi zhu”)
#可以直接写入行,用writelines
#writelines表示写入很多行,参数可以是list格式
l = ["houzi","love","pangqi"]
with open(r"test01.txt", "a") as f:
f.writelines(l)
#持久化-pickle
-序列化(持久化,落地):把程序运行中的信息保存在磁盘上
-反序列化:序列化的逆过程
-pickle:python提供的序列化魔模块
-pickle.dump:序列化
-pickle.load:反序列化
#序列化案例
import pickle
age = 19
with open(r"test01.txt","wb") as if:
pickle.dump(age,f)
#反序列化案例
import pickle
with open(r"test01.txt","rb") as if:
age = pickle.load(f)
#持久化-shelve
-持久化工具
-类似字典,用kv对来保存数据,获取方式跟字典类似
-open, close
#使用shelve创建文件并使用
import shelve
#打开文件,shev相当于一个字典
shv = shelve.open(r"shv.db")
shv["one"] = 1
shv.close()
#shelve读取
shv = shelve.open(r"shev.db")
print(shv["one"])
shv.close()
#shelve特性
-不支持多个应用并行写入
-为了解决这个问题,open的时候可以使用flag = r