zoukankan      html  css  js  c++  java
  • 13-持久化-文件

    文件

    • 长久保存信息的一种数据信息集合
    • 常用操作
      • 打开关闭(文件一单打开,需要关闭操作)
      • 读写内容
      • 查找

    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 f:
    	pass
    	# 下面语句块开始对文件f进行操作
    	# 在本模块中不需要再使用close关闭文件f
    
    # with案例
    
    with open('test01.txt', 'r') as f:
    	# 按行读取内容
    	strline = f.readline()
    	while strline:
    		print(strline)
    		strline = f.readline()
    help(open)
    
    # read是按字符读取文件的内容
    # 允许输入参数决定读取几个字符,如果没有制定,从当前为止读取到结尾
    # 否则,从当前为止读取制定个数字符
    
    with open(r'test01.txt','r',) as f:
    	strChar = f.read(1)
    	print(len(strChar))
    	print(strChar)
    	
    
    import time
    with open(r'test01.txt','r',) as f:
    	strChar = f.read(1)
    	while strChar:
    		print(strChar)
    		time.sleep(1)
    		strChar = f.read(1)
    

    seek(offset, from)

    • 移动文件的读取位置,也叫读取指针
    • from的取值范围:
      • 0:从文件头开始偏移
      • 1:从文件当前为止开始便宜
      • 2:从文件末尾开始偏移
    • 移动的单位是字节(byte)
    • 一个汉字由若干个字节构成
    • 返回文件只针对当前位置
    # seek案例
    # 打开文件后,从第5个字节处开始读取
    #打开读写指针在0处,即文件的开头
    with open(r'test01.txt','r',) as f:
    	# seek移动单位是字节
    	f.seek(4,0)
    	strChar = f.read()
    	print(strChar)
    

    tell函数

    • 用来显示文件读写指针的当前位置
    with open(r'test01.txt','r',) as f:
    	strChar = f.read(3)
    	pos = f.tell()
    	
    	while strChar:
    		print(pos)
    		print(strChar)
    		print("**" * 10)
    		strChar = f.read(3)
    		pos = f.tell
    

    文件的写操作-write

    • write(str):把字符串写入文件
    • writeline(str):把字符串按行写入文件
    • 区别
      • write函数参数只能是字符串
      • writelines参数可以是字符串,也可以是字符序列
    # write案例
    # 1.向文件追加一句诗
    # write案例
    # 1.向文件追加一句诗
    with open(r'test01.txt','a',) as f:
    	f.write("生活不仅有眼前的苟且,
    还有远方的苟且")
    	l = ['王晨熙','蒋俊才']
    	for i in l:
    		
    		f.writelines('
    ' + i)
    

    持久化 -pickle

    • 序列化(持久化,落地):把程序运行中的信息保存在磁盘上
    • 反序列化:序列号的逆过程
    • pickle:python提供的序列化模块
    • pickle.dump:序列化
    • pickle.load:反序列化
    import pickle
    
    age = [21, 'jjc', 'wcx', [123,43]]
    
    with open(r"test01.txt", 'wb') as f:
    	pickle.dump(age, f)
    
    with open(r"test01.txt", 'rb') as f:
    	a = pickle.load(f)
    	print(a)
    

    持久化-shelve

    • 持久化工具
    • 类似字典,用kv对保存数据,存取方式跟字典也类似
    • open,close
    • 特性
      • 不支持多个应用并行写入
        • 为了解决这个问题,open的时候可以使用flag=r
      • 写回问题
        • shelve修改参数,一旦shelve关闭,内容只存在于内存中,没有写回数据库
        • 解决方法:强制写回:writeback=True
    # 使用shelve创建文件并使用
    import shelve
    # 打开文件
    # shv相当于一个字典
    shv = shelve.open(r"shv.db")
    
    shv['one'] = 1
    shv['two'] = 2
    shv['three'] = 3
    
    shv.close()
    
    # 通过以上案例发现,shelve自动创建的不仅仅是一个shv.db文件,还包括其他格式文件
    
    # shelve读取案例
    shv = shelve.open(r"shv.db")
    try:
    	print(shv['one'])
    	print(shv['twoo']) # 此处输入错误
    except Exception as e:
    	print("烦死了") # 报错执行当前文字
    finally:
    	shv.close()#不管结果如何都要执行关闭
    
    import shelve
    shv = shelve.open(r'shv.db')
    try:
    	shv['one']={"eins":1,'zwei':2,'drei':3}
    	k1 = shv['one']
    	k1['eins'] = 100
    	print(k1) # 此处返回的是内存中的数据,非数据库中的数据
    finally:
    	shv.close()
    shv = shelve.open(r'shv.db')
    try:
    	k1 = shv['one']
    	print(k1)    # 数据库中的数据并未修改,修改需加writeback=True
    finally:
    	shv.close()
    '''
    shv = shelve.open(r'shv.db', writeback=True)
    try:
    	k1 = shv['one']
    	k1['eins']=100
    	print(k1)
    finally:
    	shv.close()
    '''
    with shelve.open(r'shv.db', writeback=True) as shv:
    	k1 = shv['one']
    	k1['zwei'] = 1000
    	print(k1)
    
    with shelve.open(r'shv.db') as shv:
    	print(shv['one'])
    
  • 相关阅读:
    jquery 的 outerWidth() 、width() 、innerWidth()
    图片自动切换 避免 鼠标快速滑过
    Ajax中日历控件的使用
    asp.net如何读取xml文件中的数据
    ASP.NET使用AspNetPager实现简单的分页功能
    XmlDataDocument与DataSet相互转化
    C#中如何过滤掉多余的html代码
    asp.net的几种经典的页面传值方法
    ASP.Net分页方法详解
    ASP.Net中省市级联有关
  • 原文地址:https://www.cnblogs.com/rener0424/p/10437555.html
Copyright © 2011-2022 走看看