#文件:长期保存数据信息的集合 #常用操作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'])