python文件落地

 

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

 

posted @ 2020-04-25 13:52  和而同  阅读(329)  评论(0编辑  收藏  举报