zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    Android学习之多线程开发总结<二>
    Android学习之多线程开发总结<一>
    Android代码模版整理<一>
    Android学习之Bluetooth开发总结<续3>
    Android学习—自定义组件
    Android学习之解析XML
    Android学习—自定义对话框Dialog
    Android学习之Bluetooth开发总结<续2>
    Android学习之Bluetooth开发总结<续>
    .Net Core 发布项目时出现警告提示“不建议指定此包的版本”的解决办法
  • 原文地址:https://www.cnblogs.com/TK-tank/p/12284422.html
Copyright © 2011-2022 走看看