#文件:长期保存数据信息的集合
#常用操作open函数
#第一个参数必须,指明文件路径和文件名
#第二个参数,打开模式:r 只读、w 只写、x 创建方式打开,如果文件已经存在报错、a 追加、b 二进制方式、t 文本方式打开 、+ 可读写
#with语句:是一种为上下文管理协议的技术
#自动判断文件的作用域,自动关闭不在使用的文件句柄
with open('text01.txt', 'r', encoding='utf-8') as f:
#以行读取
re = f.readline()
#此结构保证能够读取文件内所有内容
while re:
print(re)
re = f.readline()
with open('text01.txt', 'r', encoding='utf-8') as f:
#以行读取
re = f.readlines()
print(re)
with open('text01.txt', 'r', encoding='utf-8') as f:
#list能将打开文件作为参数,把文件每一行内容作为一个元素
l = list(f)
for line in l:
print(line)
#read按字符方式读取内容,允许输入参数指定读取范围,默认读取全文
with open('text01.txt', 'r', encoding='utf-8') as f:
strChar = f.read()
print(strChar)
with open('text01.txt', 'r', encoding='utf-8') as f:
strChar = f.read(1) #每次读取一个
while strChar:
print(strChar, end="")
strChar = f.read(1)
#seek(offset, from) 移动文件读取位置,也叫指针读取
#from取值:0:从头开始偏移,1:从文件的当前位置开始偏移 2:从文件末尾开始偏移 (移动的单位是字节,一个汉字由若干个字节构成)
with open('text01.txt', 'r', encoding='utf-8') as f:
f.seek(6,0) #打开文件指针指向0处,从底6个字节开始读取
strChar = f.read()
print(strChar)
import time
with open('text01.txt', 'r', encoding='utf-8') as f:
strChar = f.read(3) # read读取单位就是字符,可以理解in一个汉字一个字符
while strChar:
print(strChar)
# time.sleep(0.1)
strChar = f.read(3)
#tell函数用于显示当前文件指针位置
with open('text01.txt', 'r', encoding='utf-8') as f:
strChar = f.read(3) # read读取单位就是字符,可以理解in一个汉字一个字符
pos = f.tell() #tell返回单位是字节
while strChar:
print(strChar)
print(pos)
strChar = f.read(3)
pos = f.tell()
#write 文件的写操作
#write(str) 将字符串写入文件
#writelines(str) 将字符串按行方式写入文件
#区别:writer只能写入字符串,writelines可以写入以list为参数数据
# with open('text01.txt', 'a', encoding='utf-8') as f:
# f.write('生活不仅有眼前苟且,还有诗和远方')
#
# with open('text01.txt', 'a', encoding='utf-8') as f:
# l = ['生活不仅有眼前苟且', '还有诗和远方']
# f.writelines(l)
#持久化(持久化,落地)--pickle:实现python数据结构二进制序列化和反序列化
# 序列化:将python数据结构转换为二进制(把程序运行的信息保存到磁盘) pickle.dump
# 反序列化:把二进制转换为python数据结构(把磁盘数据转换为程序运行的信息) pickle.load
#file与pickle区别,file只能保存信息文字性信息, pfckle可以保存带有结构化的数据,如一个类实例
import pickle
with open('text02.txt', 'wb') as f:
l = ['dd', '11', 'dana', '中文']
pickle.dump(l, f)
with open('text02.txt', 'rb') as f:
a = pickle.load(f)
print(a)
# 持久化-shelve
# 持久化工具,类似字典,使用kv对保存数据,存取方式也与字典类似
# open,close
import shelve
sh = shelve.open('sh.db')
sh['one'] = {'kk':'2','dd':'33'}
sh['two'] = '二'
sh['three'] = '3'
sh.close()
#通过以上案例发现,shelve不仅能创建.db文件,也可以创建其他格式文件
#shelve读取
sh = shelve.open('sh.db') #注意一定要保证文件被关闭
try:
print(sh['one'])
print(sh['three'])
finally:
sh.close()
# shelve特性
# 不支持多个应用并行写入,为解决这个问题,open时候可设置flag=r
# 写回问题,shelve不会等待持久化数据进行任何修改,可使用writeback=True 强制写回
#shelve也可以使用wiith进行操作,用法与open类似
sh = shelve.open('sh.db', writeback=True)
try:
k = sh['one']
k['dd'] = 'ieur' #若没有设置writeback=True,关闭时候,k['dd'] = 'ieur' 还在内存中,并没有写入文件
finally:
sh.close()
sh = shelve.open('sh.db')
try:
print(sh['one']['dd'])
finally:
sh.close()
with shelve.open('sh.db', writeback=True) as sh:
print(sh['one'])