zoukankan      html  css  js  c++  java
  • python文件处理

    python文件操作

    python中使用open函数去打开一个文件,实际上是对系统调用中的文件操作的一种函数封装,打开文件需要经过操作系统和内核去处理一个IO 操作,是一种系统调用的过程,open函数只是为了简化使用而进行的一层封装。创建一个文件,会在磁盘中开辟一段空间并标记为文件,windows 开辟空文件后大小为4k ,磁盘中每一扇区的大小为512字节,是最小储存单元(即使只存储1字节大小数据 也将占用整个扇区的512字节的空间), 这个扇区将不能够被其他数据所用。

    文件对象

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

    文件对象参数

    • mode:文件的打开模式,t(默认)表示为字符形式打开,这就需要指定编码,r, w, a标识使用读,写,追加的方式打开。
    • buffering

      当使用字节模式时

    buffering = -1 使用默认缓冲区大小
    buffering = 0  关闭缓冲区
    buffering = 1 不支持,使用默认的缓冲区
    buffering > 1 设置缓冲区的大小,可以超过默认值

      当使用文本模式时

    buffering = -1 使用默认缓冲区大小
    buffering =1 不支持
    buffering = 1 以换行符作为一次缓冲大小,但是不能超过设定的默认缓冲区大小
    buffering >1 最大为默认值个字节,flush后写入磁盘
    • encoding

    打开文件应该指定文件的编码,将以该方式解码字节,映射到相应的字符,在不同的操作系统使用的默认编码不同,不指定将会以默认编码解码,例如Windows中文默认以jbk写入,当该文件在linux 打开时,默认使用utf-8去解码字节,就造成乱码,文件时会失败。所以encoding一般指定为 "utf - 8",而不是使用默认值。

    • newline

    在读取文件时,会解释读取到的换行字符,使用换行符号一般三种, , , ,在Windows中写入文件时,换行时写入文档的字节的 ,mac 写入的是 , linux 写入的是

    • closefd = True

    关闭文件时释放文件描述符,设置为False将不会释放文件描述符。

     

    文件对象的方法

    • f.seek(cookie, whence = 0,1,2):偏移量 + 起始位置;返回偏移字按自己计算指针的位置
      • 文本模式:只支持头部正向偏移,结尾和中部不能偏移
      • 二进制模式:可以随意偏移,以字节为单位,返回最终指向的位置
      • 右边界超界后会补空白字符 "x00",可以直接seek(100) 到指定的长度,内容为空
    • f.tell():当前指针的位置,以字节计算的
    • f.read(size=1024):默认读取1024长度,可以指定长度
    • f.readline():文件的内容,以行位单位,每次调用返回一行内容
    • f.write(content):向内存缓冲区写入内容,此时不会写入磁盘
    • f.close():关闭文件对象,释放文件操作符(一个整数fd),关闭前flush写入磁盘
    • f.seekable(),f.readable(),f.writable(),可读可写
    • f.fileno()      查看文件对象的文件描述符
    • f.truncate([size])   不论指针在什么位置,只留下指针前 size 个字节的内容,其余全部删除; 如果没有传入 size,则当指针当前位置到文件末尾内容全部删除

    缓冲区:(buffering) 

    buffering 类似一个队列,用于缓冲写入磁盘中数据,写入数据时超过缓冲区的最大容量,将会自动将缓冲区域的内容写入到磁盘内。操作系统默认制定了缓冲区的大小,在python中 使用模块的 io.default_buffer_size 查看默认缓冲大小,一般为 8k (8192字节) 和 4k (4096字节) 大小

    from io import DEFAULT_BUFFER_SIZE 
    print(io.DEFAULT_BUFFER_SIZE)

    数据写入磁盘以簇为单位,,一次写满一个簇区域,所以 一般 4k 或 8k 写入一次,为一个簇的整数倍,不会浪费磁盘资源。缓冲区大小也应该设置为一个簇大小的整数倍,一般为1024的整数倍;

    文件描述符fd

    文件描述符是一些小的整数,对应于当前进程所打开的文件。例如,标准输入的文件描述符通常是 0,标准输出是 1,标准错误是 2。之后被进程打开的文件的文件描述符会被依次指定为 3, 4, 5 等。在 Unix 平台中套接字和管道也被文件描述符所引用。当需要时,可以用fileno() 可以获得file object 所对应的文件描述符。

    上下文管理

    with语句

    在正常的管理各种系统资源(文件、锁定和连接)过程中,一旦涉及到异常时通常是个棘手的问题。异常很可能导致控制流跳过负责释放关键资源的语句。例如打开一个文件进行操作时,如果意外情况发生(磁盘已满、特殊的终端信号让其终止等),就会抛出异常,这样可能最后的文件关闭操作就不会执行。如果这样的问题频繁出现,则可能耗尽系统资源。

    对于文件对象,当离开with的执行区域时,会对 with 后的对象 f 进行关闭。
    f = open("file")
    with f :
        pass
    # 离开with语句,执行文件对象的 f.close(),关闭文件对象
    with open("file") as f:
        pass

     

  • 相关阅读:
    Nginx 启用gzip压缩
    HTTP压缩的过程
    什么是HTTP压缩及HTTP压缩的过程
    Fiddler抓包工具总结
    HTTP内容编码和HTTP压缩的区别
    LINQ query on a DataTable
    C# Collection for "most recently used"
    Keep timer (setInterval) running while reloading page
    Is there a way to detect if a browser window is not currently active?
    Force Logout users if users are inactive for a certain period of time
  • 原文地址:https://www.cnblogs.com/k5210202/p/13068597.html
Copyright © 2011-2022 走看看