文件操作——01

213 阅读3分钟
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file:文件名
mode:打开模式
buffering:

普通的文本文件,既可以用文本方式打开,也可以用二进制方式打开

二进制文件,必须以二进制文件打开,例如图片,音频,视频类 image.png

image.png

1、如何设置文件的缓冲 实际案例:

            将文件内容写到硬件设备时,使用系统调用,这类I/O操作的时间很长。为了减少I/O操作的次数,文件通常使用缓冲区。(有足够多的数据才进行系统调用)文件的缓冲行为,分为全缓冲、行缓冲、无缓冲。

            如何设置python中文件对象的缓冲行为?python文件对象默认的缓冲行为4个字节(4096)

    解决方案:

            全缓冲:open函数的buffering设置为大于1的整数n,n为缓冲区大小。

            行缓冲:open函数的buffering设置为1 。

            无缓冲:pen函数的buffering设置为0。

    注意:都是在python交互模式下进行的操作,如果是用脚本,脚本运行完关闭文件对象,缓冲区内容就会写到磁盘中,这样就观察不了缓冲区不同大小的行为了。

2、文件缓冲介绍? 对于磁盘这类的块设备,它的读写不是一个字节一个字节完成的,而是按块每次读写一个块,假设一个块的大小是4096个字节,那就意味着写入一个字节和写入4096个字节都需要一次I/O操作,它们的用时是相同的。在这种情况为了提高效率就要减少I/O操作的次数,使用的手段就是为文件设立一个缓冲区。当需要写入的字节数不足一个块设备大小的时候,那么都放入缓冲区当中,凑够一个块的大小才调用一次系统调用。

    全缓冲就是缓冲区有一定大小满足那个数量就进行一次系统调用;

    行缓冲就是碰到一个换行符就进行一次输出也就是一次系统调用;

    无缓冲就是不希望有缓冲的实时写入到文件,如串口设备,需要及
    
    
    

文件偏移量

操作中读和写共用一个文件偏移

"""
offset
    tell()获取偏移量
    seek(offset,whence)移动文件偏移量
    offset表示相对于某个位置移动的字节数,正数代表向后移动,负数表示向前移动
    whence是基准位置(offset的位置),默认为0,表示从文件头位置开始。1表示从当前位置算起,2表示从文件末尾算起
        只有用二进制打开的文件时whence基准位置才能填写1或2
注意:
    每次用open打开文件时,偏移量都在开头位置
    a方式打开文件时,偏移量在结尾
    读写操作公用一个文件偏移量的
    如果偏移量后面有内容,在添加内容就是覆盖操作
"""