100.file文件操作

open() 函数

  • 用于打开一个文件,返回一个文件对象。
  • 如果文件无法被打开,会抛出OSError
  • 执行open()函数,就要执行close()函数,进行保存

完整语法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
    • r :以读取的方式打开文件。
    • w :以写入的方式打开文件,若文件存在就覆盖文件内容,若文件不存在就创建文件
    • a :以写入的方式打开文件,若文件存在就在文件内容最后追加新内容,若文件不存在就创建文件
    • x :创建一个文件,并以写方式打开。
    • b :以binary(二进制)方式写入。
    • t :以文本方式打开
    • +:可读可写
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型

代码例子

  • f(实例)被称为句柄
  • r后面跟的字符串不进行转义(可不加)
f = open(r"./TEXT.txt", mode="w")
f.close()

with语句

  • with语句使用的技术是一种上下文管理协议的技术(ContextManagementProtocal)
  • 自动判断文件的作用域,自动关闭打开的文件句柄,不需要在使用close()函数
  • 推荐使用此语句打开文件
with open(r"./TEXT.txt", "r") as f:
    pass

文件读操作

.read(file)函数

  • 按字符读取内容。
  • 可以输入参数设置一共读取的字符个数,默认从头到尾。
with open(r"./TEXT.txt", "r") as f:
    l = f.read(5)
    print(l)

.readline(file)函数

  • 按行读取
with open(r"./TEXT.txt", "r") as f:
    l = f.readline()
    while l :
        print(l)
        l = f.readline()
  • 用list也能达到同样效果
with open(r"./TEXT.txt", "r") as f:
    l = list(f)
    for i in l:
        print(i)

.seek(offset, from)函数

  • 移动文件的读取指针
  • offset :指针的偏移量
    • 正数为右偏移
    • 负数为左偏移
  • from :偏移起始位置
    • 0 :从文件头开始偏移
    • 1 :从文件当前位置开始偏移
    • 2 :从文件末尾开始偏移
  • 移动的单位为字节
with open(r"./TEXT.txt", "r") as f:
    f.seek(4, 0)
    print(f.read(1))

.tell()函数

  • 返回文件读取指针的当前位置
  • 返回值单位为byte
with open(r"TEXT.txt", "r") as f:
    s = f.read(3)
    print(f.tell())

文件的写操作

.write(str)函数

  • 把字符串写入文件
  • str参数只能是字符串
with open(r"TEXT.txt", "a") as f:
    s = "面朝大海,春暖花开"
    f.write(s)

.writelines(str)函数

  • 把字符串按行写入文件
  • str参数可以是字符串,也可以是字符序列
with open(r"TEXT.txt", "a") as f:
    s = ["面朝大海","春暖花开"]
    f.writelines(s)

pickle模块

  • python的序列化模块
  • 序列化:把程序运行中的信息保存在磁盘上
  • 反序列化:把磁盘上的信息读取到程序中
  • 可以保存简单信息,也可以是一个类的实例
    • 所有原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
    • 原生类型组成的列表,元组,字典和集合等序列。
    • 函数,类,类的实例。

pickle.dump(obj, file, [,protocol])函数

  • boj :被存储的数据
  • file : 被存入数据的文件
  • protocol :数据存储时使用的编码
    • 值0 :使用ASCII编码(默认)
    • 值1 :使用旧二进制编码
    • 值2 :使用新二进制编码(比旧二进制更高效一些)
import pickle
age = 20
l = ["面朝大海","春暖花开"]
with open(r"./TEXT.txt", "wb") as f:
    pickle.dump(age, f)

pickle.load(file)函数

  • file : 要读取数据的文件
import pickle
with open(r"./TEXT.txt", "rb") as f:
    age = pickle.load(f)
print(age)

shelve模块

  • 序列化模块,本质时一个数据库
  • 类似dict,以key值对的形式系列化数据

特性

  • 不支持多个应用程序并行写入,可以多个应用读取,加参数flag="r".
  • 写回问题:修改其中数据库键值内容后就执行了close(),但修改的内容还在内存中,并没有存入数据库,用writeback=Ture参数解决。

shelve.open(file)&chelve.close()函数

  • 可以使用with语句
  • open()与close()必须成对出现。
  • 若中途报错,如访问了不存在key值,会报错,无发完成close(),所以有必要进行特殊处理。
#存储
import shelve
with shelve.open(r"./t.db") as sh:
    sh["a"] = 1
    sh["b"] = 2

#读取
sh1 = shelve.open(r"t.db", flga="r")
try:
    print(sh1["a"])
    print(sh1["b"])
except Exception as error:
    print("报错")
finally:
    sh1.close()
posted @ 2020-02-08 18:44  TK_tank  阅读(230)  评论(0编辑  收藏  举报