• python笔记-文件操作


    一、文件

    1.1 文件打开与读写

    文件打开要先在硬盘中寻找到要打开的文件,然后完整的映射到内存中,读取操作会在内存中完成。当文件要写入时,会先将数据写在内存的和缓冲区里面,在对缓冲区进行刷新时才会写入硬盘文件。

    1.2 打开文件(内置函数open())

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

    • file: 可以是要打开文件的路径, 也可以是被封装的整数类型文件描述符

    • mode: 可选字符串, 用于指定打开文件的模式

    模式(mode) 含义 解释
    "r" 以只读方式打开文件 默认值
    "w" 以只写方式打开文件 文件存在则打开, 不存在则创建
    "a" 以追加内容方式打开文件 文件存在则打开, 不存在则船舰
    "x" 排他性创建文件 文件存在这报错, 不存在则创建文件
    • buffering: 是一个可选的整数,用于设置缓冲策略
    buffering 含义 解释
    0 关闭缓冲 仅允许在二进制模式下
    1 行缓冲 仅在文本模式下可用
    >1 固定大小的块缓冲区 以字节为单位
    • encoding: 是用于解码或编码文件的编码的名称。 只在文本模式下使用; 默认编码是依赖于平台(locale.getpreferredencoding() 返回值), 但可以使用任何Python支持的 text encoding.

    • errors 是一个可选的字符串参数, 用于指定如何处理编码和解码错误, 不能在二进制模式下使用

    errors 含义 解释
    'strict' 如果存在编码错误, 会引发 ValueError 异常 与默认值None相似
    'ignore' 忽略错误 可能会导致数据丢失
    'replace' 会将替换标记插入有错误数据的地方
    'surrogateescape'
    'xmlcharrefreplace' 编码不支持的字符将替换为相应的XML字符引用 &#nnn; 只有在写入文件时才支持
    'backslashreplace' 用Python的反向转义序列替换格式错误的数据
    'namereplace' N{...} 转义序列替换不支持的字符
    • newline: 控制 universal newlines 模式如何生效(它仅适用于文本模式)。它可以是 None,'',' ',' ' 和 ' '。

    • closefd: 文件关闭时,底层文件描述符的状态
      1. closefd=False且给出了文件描述符: 底层文件描述符保持打开
      2. 给出文件名且closefd=True, 否则会报错

    • opener: 可调用的自定义开启器, 必须返回一个打开的文件描述符

    • 新创建的文件是 不可继承的。

    1.3 文件写入

    1. file.write(obj:str): 将字符串内容从光标位置开始写入
    2. file.writelines(iterable): 将可迭代对象中的每一个元素从光标位置开始写入文件,如果该元素不是 str 则报错

    1.4 文件指针操作

    1. file.tell(): 返回光标位置

    2. file.seek(offset, whence=0): 文件指针的移动

      • offset: 值必须为一个整数,表示移动多少 字节 ,在utf-8字符集中汉字一般站3字节。
      whence 含义 解释
      0 从文件开始位置移动 文件头部
      1 从光标当前位置开始移动
      2 从文件末尾开始移动

    1.5 文件读取

    1. file.read([size: int]): 读取文件内容
      • 返回字符串或二进制对象
    size 含义
    <0或 不写 读取文件全部内容
    >=0 读取并返回size字符(文本模式), 或返回size字节(二进制模式)
    1. file.readline([size: int]): 从文件中读取一行, 保留换行符(" ")在末尾

      • size超过当前行字符数, 则只读取当前行
      • 返回字符串或二进制对象
    2. file.readlines([size: int]): 从文件中读取多行, 并将每一行数据保留在列表中

      • size: 如果超过当前行剩余字符, 读取下一行

    1.6 文件自动管理

    语法:with open(_file_path:str, _mode:str) as file:
    使用 with 管理文件,在文件处理的代码执行完之后会自动关闭文件

    1.7 文件关闭(file.close())

    1.8 缓冲区刷新(file.flush())

    二、io流

    在需要短时间读取大量数据时,我们直接在内存中读取性能会比较好. io模块中实现这一操作
    io对象的方法和文件方法是一致的.

    import io
    sio = io.StringIO()  # 创建字符io
    sio.write('我是字符串io')  # 写入字符io
    print(sio.getvalue())  # 读取字符io
    sio.close()
    
    bio = io.BytesIO()  # 创建字节io
    bio.write('hello world'.encode())  # 写入字节io
    print(bio.getvalue().decode())  # 获取字节io
    bio.close()
    
  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13166133.html
Copyright © 2020-2023  润新知