文件
open函数
- open函数负责打开文件,带有很多参数
- 第一个参数:必须有,文件的路径和名称
- mode:表明文件用什么方式打开
- r:以只读方式打开
- w:写方式打开,会覆盖以前的内容
- x:创建方式打开,如文件已存在,报错
- a:append方式,以追加的方式对文件内容进行写入
- b:binary方式,以二进制方式写入
- t:文本方式打开
- +:可读写
f = open(r'tese01.txt', 'w')
f.close()
with语句
- with语句使用的技术是一种成为上下文管理协议的技术
- 自动判断文件的作用域,自动关闭不再使用的打开的文件句柄
with open(r'tese01.txt', 'r') as f:
pass
with open (r'tese01.txt', 'r') as f:
strline = f.readline()
while strline:
print(strline)
strline = f.readline()
美人卷珠帘
深坐颦蛾眉
但见泪痕湿
不知心恨谁
with open(r'tese01.txt', 'r') as f:
l = list(f)
for line in l:
print(line)
美人卷珠帘
深坐颦蛾眉
但见泪痕湿
不知心恨谁
with open(r'tese01.txt', 'r') as f:
strchar = f.read(6)
print(len(strchar))
print(strchar)
6
美人卷珠帘
with open(r'tese01.txt', 'r') as f:
s = f.read(1)
while s:
print(s)
s = f.read(1)
美
人
卷
珠
帘
深
坐
颦
蛾
眉
但
见
泪
痕
湿
不
知
心
恨
谁
with open(r'tese01.txt', 'r') as f:
s = f.read(3)
while s:
print(s)
s = f.read(3)
美人卷
珠帘
深坐颦
蛾眉
但见泪
痕湿
不知心
恨谁
seek(offset, from)
- 移动文件的读取位置,也叫读取指针
- from的取值范围:
- 0: 从文件头开始偏移
- 1:从文件当前位置开始偏移
- 2: 从文件末尾开始偏移
- 移动的单位是字节(byte)
- 一个汉子由若干个字节构成
- 返回文件只针对 当前位置
with open(r'tese01.txt ', 'r') as f:
f.seek(6,0)
strchar = f.read()
print(strchar)
珠帘
深坐颦蛾眉
但见泪痕湿
不知心恨谁
with open(r'tese01.txt ', 'r') as f:
strchar = f.read(3)
pos = f.tell()
while strchar:
print(pos)
print(strchar)
strchar = f.read(3)
pos = f.tell()
6
美人卷
12
珠帘
18
深坐颦
24
蛾眉
30
但见泪
36
痕湿
42
不知心
46
恨谁
文件的写操作-write
- write(str): 将字符串写入文件
- writelines(sequence): 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
with open(r'tese01.txt', 'a') as f:
f.write('\n《怨情》 李白著')
l =['1\n','2,3,4,5','\n','dd']
with open(r'tese01.txt', 'a') as f:
f.writelines(l)
持久化 - pickle
- 序列化(持久化,落地):把程序运行中的信息保存在磁盘上
- 反序列化: 序列号的逆过程
- pickle: python提供的序列化模块
- pickle.dump:序列化
- pickle.load:反序列化
import pickle
age = 18
with open(r'tese01.txt', 'wb') as f:
pickle.dump(age,f)
import pickle
with open(r'tese01.txt', 'rb') as f:
age = pickle.load(f)
print(age)
18
持久化-shelve
- 持久化工具
- 类似字典,用kv对保存数据,存取方式跟字典也类似
- open, close
import shelve
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
shv['one'] = 1
shv['two'] = 2
shv['three'] = 3
shv.close()
shelve特性
- 不支持多个应用并行写入
- 为了解决这个问题,open的时候可以使用flag=r
- 写回问题
- shelv情况下不会等待持久化对象进行任何修改
- 解决方法: 强制写回:writeback=True
import shelve
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv', flag='r')
try:
k1 = shv['one']
print(k1)
finally:
shv.close()
1
import shelve
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
try:
shv['one'] = {'eins':1, 'zwei':2, 'drei':3}
finally:
shv.close
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
try:
one = shv['one']
print(one)
finally:
shv.close()
{'eins': 1, 'zwei': 2, 'drei': 3}
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
try:
k1 = shv['one']
print(k1)
k1['eins'] = 100
finally:
shv.close()
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
try:
k1 = shv['one']
print(k1)
finally:
shv.close()
{'eins': 1, 'zwei': 2, 'drei': 3}
{'eins': 1, 'zwei': 2, 'drei': 3}
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv', writeback=True)
try:
k1 = shv['one']
print(k1)
k1['eins'] = 100
finally:
shv.close()
shv = shelve.open(r'C:\Users\18171\Desktop\笔记\基础语法笔记\shelve\shv')
try:
k1 = shv['one']
print(k1)
finally:
shv.close()
{'eins': 1, 'zwei': 2, 'drei': 3}
{'eins': 100, 'zwei': 2, 'drei': 3}