Python-学习之路-13 file 文件
2019-02-26 本文已影响0人
末世狂人
文件
- 长久保存信息一种数据信息集合
- 常用操作
- 打开关闭(文件一旦打开之后,需要进行关闭操作)
- 读写内容
- 查找
open 函数
- open函数负责打开文件
- 参数
- 文件的路径和名称
-
- mode:文件用什么方式打开
- r:只读方式
- w:写入方式,写入的内容会覆盖以前的内容(如果没有文件,则创建)
- x:创建方式打开,创建一个新文件,并保存.(如果文件已经存在,则会报错)
- a(append):追加方式,以追加的方式写入内容
- b(binary):二进制方式写入
- t:文本方式打开
- +:可读写
- 参数
# 打开文件,用写的形式
# f称之为文件句柄
f = open("test01.txt",'w')
#文件打开之后必须关闭
f.close()
with 语句
- with语句使用的技术是一种成为上下文管理协议技术(ContextManagementProtocal)
- 自动判断文件的作用域,自动关闭不在使用的文件句柄
# with语句案例
with open(r"test01.txt",'r') as f1:
# 按行读取内容
strline = f1.readline()
# 这种结构能够保证完整的读取文件直到结尾
while strline:
print(strline)
strline = f1.readline()
print("方法二")
with open(r"test01.txt",'r') as f2:
# 全部读取(如果文件过大,不推荐此方法)
strlines = f2.readlines()
for sl in strlines:
print(sl)
人生若只如初见
何事秋风悲画扇
等闲变却故人心
却道故人心易变
方法二
人生若只如初见
何事秋风悲画扇
等闲变却故人心
却道故人心易变
# read 按字符读取文件内容
# 允许输入参数巨鼎读取机制字符,如果没有制定,从当前位置读取到结尾
# 否则.从当前位置读取到指定个数字符
with open(r'test01.txt','r') as f:
strChar = f.read(7)
print(strChar)
人生若只如初见
with open(r'test01.txt','r') as f:
strChar = f.read(1)
while strChar:
print(strChar,end = "")
strChar = f.read(1)
人生若只如初见
何事秋风悲画扇
等闲变却故人心
却道故人心易变
seek (offset,from)
- 移动文件的读取位置.也叫读取指针
- from的取值范围
- 0:从文件头开始偏移
- 1:从文件当前位置开始偏移
- 2:从文件尾开始偏移
- 移动的单位是字节(byte)
# seek 案例
# 打开问价后,从第五个字节开始读取
with open(r'test01.txt','r') as f:
f.seek(6,0)
strChar = f.read()
print(strChar)
若只如初见
何事秋风悲画扇
等闲变却故人心
却道故人心易变
tell 函数
- 用来显示文件读写指针的当前位置
- 返回数字的单位是byte
# tell
with open(r'test01.txt','r') as f:
strChar = f.read(7)
index = f.tell()
while strChar:
print(index)
print(strChar)
strChar = f.read(8)
index = f.tell()
21
人生若只如初见
43
何事秋风悲画扇
65
等闲变却故人心
87
却道故人心易变
88
write 文件的写操作
- write(str):把str写入文件
- writeline(str):把str按行写入文件
- 区别
- write:函数参数只能是字符串
- writeline:参数可以使字符串,也可以是字符序列
# write 案例
with open(r'test01.txt','w') as f:
f.write("昨夜雨疏风骤, \n浓睡不消残酒")
# 需手动添加换行符
strList = ["试问卷帘人\n","却道海棠依旧\n","知否知否\n","应是绿肥红瘦"]
f.writelines(strList)
pickle 持久化
- 序列化:把程序运行中的信息保存在磁盘上
- 反序列化:序列化的逆过程
- pickle:python的序列化模块(注意 这是一个模块)
- pickle.dump:序列化
- pickle.load:反序列化
shelve 持久化工具
- 类似字典,用kv对保存数据,存取方式跟字典类似
- 方法:
- open
- close
- shelve一旦打开,必须停止.所以在读取的时候,最好加上try,以便在读取时,读取到没有定义的key时报错导致没有执行close
- shelve不支持多个应用并行写入
- 为了解决这个问题,open的时候可以使用flage = r
- 写回问题
- 不会等待持久化对象进行任何修改
- 解决方法,强制写回:writeback = True
# shelve案例
import shelve
#写入
shv = shelve.open(r'shv.db')
shv['one'] = 1
shv['tow'] = 2
shv['three'] = 3
shv.close()
# 读取
shv = shelve.open(r'shv.db')
print(shv["one"])
print(shv["tow"])
print(shv["three"])
1
2
3