• 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()
    
  • 相关阅读:
    web动静分离
    vm采用NAT方式连接时,设置静态ip
    nginx实现tcp负载均衡
    读取文件
    线程池源码分析
    mongodb操作
    bind
    Xss攻击
    json和java对象相互转换
    静态资源默认加载路径
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13166133.html
Copyright © 2020-2023  润新知