持久化-文件

一、 文件
长久保存信息的一种数据信息集合

  • 常用的操作
    打开和关闭
    读写内容
    查找
    二、open()函数
  • open(dir, mode)
  • mode
    – r 只读的方式打开
    – w 读写的方式打开,若无此文件,则创建,写的时候覆盖原本内容
    – x 以创建的方式打开,若文件已经存在,则报错
    – a 以append方式打开,以追加的方式将内容写入文件
    – b 以binary方式打开,以二进制方式写入
    – t 以文本方式打开
    – + 可读写
# 打开文件,用写的方式
# r表示后面字符串内容不需要转义
# f称之为文件句柄
f = open(r"test01.txt", 'w')
# 文件打开后必须关闭
f.close()

1. with语句打开文件
用with语句打开文件,不需要关闭

with open(r'test01.txt', 'r') as f:
    # 按行读取内容
    strline = f.readline()
    # 此结构保证能够完整读取文件直到结束
    while strline:
        print(strline)
        strline = f.readline()
  • list能用打开文件的每行作为一个元素。
with open(r"test01.txt", "r") as f:
    l = list(f)
    print(l)
   # 每行后面都有换行符,而遍历打印也会打印一个换行符
    for line in l:
        print(line)

结果如下

['第一行\n', '第二行\n', '第三行\n', 'Hello!']
第一行

第二行

第三行

Hello!

read是按字符读取文件内容
允许输入参数决定读取几个字符,如果没有制定,从当前位置读取到结尾
否则,从当前位置读取指定个数字符

with open(r"test01.txt", "r") as f:
    strChar = f.read(1)
    while strChar:
        print(strChar, end = "")
        strChar = f.read(1)

结果如下

第一行
第二行
第三行
Hello!

2. seek(offset, from)
设置光标所在位置。

  • offset 偏移,单位字节
  • from 起始点 0 代表文件开头,1代表当前位置, 2代表文件末尾
with open(r"test01.txt", "r") as f:
		seek(6, 0)
		strChar = f.read()
		print(strChar)

输出结果为

行
第二行
第三行
Hello!
import time
with open(r"test01.txt", "r") as f:
    strChar = f. read(3)
    while strChar:
        print(strChar)
        strChar = f.read(3)
        time.sleep(1)

输出结果为:

第一行

第二
行
第
三行

Hel
lo!
  1. tell()
    指出光标所在的位置。
with open(r"test01.txt", "r") as f:
    strChar = f.read(3)
    pos = f.tell()
    while strChar:
        print(pos)
        print(strChar)
        strChar = f.read(3)
        pos = f.tell()

输出结果为:

9
第一行
16

第二
23
行
第
30
三行

33
Hel
36
lo!

三、write()

  • write(str) 可写入字符串
  • writelines(str或list) 可写入字符串,也可写入列表
with open(r"test01.txt", "a") as f:
		f.write("\n生活不仅有眼前的苟且,\n还有远方的枸杞")
with open(r"test01.txt", "a") as f:
		f.writelines(["\n生活不仅有眼前的苟且","\n还有远方的枸杞"])

四、持久化-pickle()

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

五、持久化-shelve

  • 持久化工具
  • 类似字典,用kv对保存数据,存取方式跟字典也类似
  • open, close
import shelve
shv = shelve.open(r"shv.db")
shv['one'] = 1
shv['two'] = 2
shv['three'] = 3
shv.close()
import shelve
shv = shelve.open(r"shv.db")
try:
    print(shv['one'])
    print(shv['two'])
    print(shv['three'])
except Exception as e:
    print("哈哈")
finally:
    shv.close()
  • shelve特性
    不支持多个应用并行写入
    为了解决这个问题,open的时候可以使用flag=r
    写回问题
    shelve什么情况下不会等待持久化对象进行任何修改
    解决方法: 强制写回:writeback=True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值