文件IO之文件操作

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

文件操作

1. 文件IO常用操作

1.1打开操作

  open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  打开一个文件,返回一个文件对象(流对象)和文件描述符,打开文件失败,则返回异常。基本使用:创建一个文件test,然后打开它,用完关闭。
  文件操作中,最常用的操作就是读和写。文件访问的模式有两种:文本模式和二进制模式。不同模式下,操作函数不尽相同,表现的结果也不一样。
注: windows中使用codepage代码页,可以认为每一个代码页就是一张编码表。cp936等同于GBK。
文件IO常用操作

1.2open的参数

  file:打开或者要创建的文件名。如果不指定路径,默认是当前路径
mode模式:
mode模式   在上面的例子中,可以看到默认是文本打开模式,且是只读的。open默认是只读模式r打开已经存在的文件。r 只读打开文件,如果使用write方法,会抛异常。 如果文件不存在,抛出FileNotFoundError异常,w 表示只写方式打开,如果读取则抛出异常 如果文件不存在,则直接创建文件 如果文件存在,则清空文件内容。x 文件不存在,创建文件,并以只写方式打开,文件存在,抛出FileExistsError异常。

  a 文件存在,只写打开,追加内容 文件不存在,则创建后,只写打开,追加内容;r是只读,wxa都是只写。wxa都可以产生新文件,w不管文件存在与否,都会生成全新内容的文件;a不管文件是否存在,都能在打开的文件尾部追加;x必须要求文件事先不存在,自己造一个新文件。
文本模式t:字符流,将文件的字节按照某种字符编码理解,按照字符操作。open的默认mode就是rt。二进制模式b :字节流,将文件就按照字节理解,与字符编码无关。二进制模式操作时,字节操作使用bytes类型。
  + 为r、w、a、x提供缺失的读或写功能,但是,获取文件对象依旧按照r、w、a、x自己的特征。+不能单独使用,可以认为它是为前面的模式字符做增强功能的。
  +模式,即读写模式,r+,其中+补充了写入功能,w+ 补充了读取的功能,但是读取不到内容,使用时以+号前的为准。

1.3文件指针

  文件指针,指向当前字节位置,mode=r,指针起始在0 mode=a,指针起始在EOF,tell() 显示指针当前位置。seek(offset[, whence]) 移动文件指针位置。offest偏移多少字节,whence从哪里开始。文本模式下 whence 0 缺省值,表示从头开始,offest只能正整数, whence 1 表示从当前位置,offest只接受0,whence 2 表示从EOF开始,offest只接受0。

2.缓存区buferring

  -1表示使用缺省大小的buffer。如果是二进制模式,使用io.DEFAULT_BUFFER_SIZE值,默认是4096或者8192。如果是文本模式,如果是终端设备,是行缓存方式,如果不是,则使用二进制模式的策略。
  0 只在二进制模式使用,表示关buffer
  1 只在文本模式使用,表示使用行缓冲。意思就是见到换行符就flush
  大于1 用于指定buffer的大小
(小文件存储浪费空间,查找麻烦)
  buffer本质上queue(先进先出),cache本质上是字典,buffer便于批量处理数据,不适合查找,cache查找比较高效。缓存都是字典,可以迅速的通过key找到value(因为key是可哈希的,同一个值的哈希值是相同的,可以快速定位,将value存储在哈希值对应的位置即可),时间复杂度是O(1)。

  缓冲区一个内存空间,一般来说是一个FIFO队列(先进先出),到缓冲区满了或者达到阈值,数据才会flush到磁盘。
  flush() 将缓冲区数据写入磁盘
  close() 关闭前会调用flush()
  io.DEFAULT_BUFFER_SIZE 缺省缓冲区大小,字节

猜你喜欢

转载自blog.csdn.net/sqsltr/article/details/90320182
今日推荐