Python高级语法——文件的读取/写入/序列化/持久化——学习心得笔记

Python高级语法——文件——学习心得笔记

1. 文件(file)

  • 长久保存信息的一种数据信息集合

1.1. open函数

  • 函数负责打开文件,带有很多参数

  • 第一个参数:文件的路径和名称,必须有

  • mode: 表明文件以什么方式打开

    • r: 只读方式打开
    • w: 写方式打开,会覆盖以前的内容,如果没有文件,则创建文件
    • x: 创建方式打开,如文件已经存在,报错
    • a: append方式,以追加的方式对文件内容进行读写
    • b: binary方式,二进制方式写入
    • t: 文本方式打开
    • +: 可读写
  • with语句

    • 打开不需要手动关闭
    • 使用的技术是一种上下文管理协议的技术
    • 自动判断文件的作用域,自动关闭不在使用的打开的文件句柄
  • seek(offset, from)

    • 移动文件的读取位置,也叫读取指针
    • from:
      • 0: 从文件开头偏移
      • 1: 从文件当前位置开始偏移
      • 2: 从文件末尾开始偏移
    • 移动单位是字节byte
    • 一个汉字由多个字节构成
    • 返回文件只针对当前位置
    • 看实例26_2.py
# coding: utf-8
# -*- coding: cp936 -*-

# **Python高级语法——文件实例

# 打开文件以写的方式
# r后面表示字符串内容不需要转义
# f称为文件句柄
# f = open(r'test01.txt', 'w')
# 这种文件打开的方式必须关闭
# f.close()


# with语句
# with open(r'test01.txt', 'r') as f:
    # pass
    # 接下来的代码开始对文件f进行操作
    # 本模块中不需要使用close关闭文件

# 写入文件
filename = 'test01.txt'

with open(filename, 'w') as f:
    f.write("I LOVE CODING.\n")
    f.write("I LOVE WORLD.\n")
    f.write("I LOVE EVERYONE.\n")

# 逐行读取
with open('test01.txt', 'r') as f:
    strline = f.readline()
    while strline:
        # rstrip删除行末尾的空格符
        print(strline.rstrip())
        strline = f.readline()

# 整个读取
with open('test01.txt', 'r') as f:
    strline = f.read()
    while strline:
        print(strline.rstrip())
        strline = f.read()

# 文件以列表返回
# 方法1
with open('test01.txt', 'r') as f:
    l = list(f)
    print(l)
    for line in l:
        print(line)

# 方法2 readlines逐行读取并存在一个列表中
with open('test01.txt', 'r') as f:
    l = f.readlines()
    print(l)
    for line in l:
        print(line)

# read直接读完,可以设定读取的字符个数
with open('test01.txt', 'r') as f:
    s = f.read()
    print(s)

# seek案例

# 打开文件后从第五个字节开始读取
with open('test01.txt', 'r') as f:
    f.seek(4, 0)
    strChar = f.read()
    print(strChar)

# 打开文件,每次读取3个字符
with open('test01.txt', 'r') as f:
    strChar = f.read(3)
    pos = f.tell()
    while strChar:
        strChar = f.read(3)
        print(pos)
        print(strChar)

        strChar = f.read(3)
        pos = f.tell()


1.2. write函数

  • write(str): 把字符串写入文件
  • writeline(str): 把字符串按行写入文件
  • 区别:
    • write: 只能是字符串
    • writeline: 可以是字符串,也可以是字符序列

1.3. pickle序列化

  • 序列化:把程序运行中的信息保存在磁盘上
  • 反序列化:序列化的逆过程
  • pickle.dump: 序列化
  • pickle.load: 返序列化
  • 看实例

1.4. shelve持久化

  • 持久化工具

  • 类似字典,用kv保存数据,存取方式跟字典类似
    = 必须open close

  • 看实例

  • shelve特性

    • 不支持多个应用并行写入

序列化持久化实例

# pickle序列化实例

import pickle

age = 19

with open('test02.txt', 'wb') as f:
    pickle.dump(age, f)

# 反序列化,读取文件
with open('test02.txt', 'rb') as f:
    age = pickle.load(f)
    print(age)


# 序列化写入一个列表
a = [20, 'Felix', 'Zhang']

with open('test03.txt', 'wb') as f:
    pickle.dump(a, f)

# 反序列化,读取文件
with open('test03.txt', 'rb') as f:
    a = pickle.load(f)
    print(a)


# 持久化shelve
# shv相当于一个字典
import shelve

shv = shelve.open(r'shv.db')
shv['one'] = 1
shv['two'] = 2
shv['three'] = 3
shv.close()

# 查看项目文件夹创建了三个shv文件,实际是个数据库

# 读取shelve案例
shv = shelve.open(r'shv.db')
try:
    print(shv['one'])
    print(shv['two'])
    print(shv['five'])
except Exception as e:
    print("没有这个元素")
finally:
    shv.close()

你可能感兴趣的:(Python高级语法,文件读取,持久化,序列化)