Python文件操作

文件操作

  • 文件操作
    • 文件IO常见操作
    • 打开操作
      • open的参数
      • read
      • 行读取
      • write
      • close
      • 其他
    • 上下文管理

文件IO常见操作


命令 功能
open 打开
read 读取
write 写入
close 关闭
readline 行读取
readlines 多行读取
seek 文件指针操作
tell 指针位置

打开操作


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

打开一个文件,返回一个文件对象(流对象)和文件描述符。打开文件失败,则返回异常。

文件操作中,最常用的操作就是读和写。

文件访问的模式有两种:文本模式和二进制模式。不同模式下,操作函数不尽相同,表现的结果也不一样。

open的参数

  • file :打开或要创建的文件名。如果不指定路径,默认是当前路径。

  • mode

描述字符 含义
r 缺省的,表示只读打开,使用write方法会抛异常。如果文件不存在,抛出FileNotFoundError异常。
w 只写打开,如果读取会抛出异常,文件不存在则创建,文件存在则覆盖。
x 创建并以只写方式写入一个新文件,文件存在的话,抛出FIleExsitsError异常。
a 写入打开,如果文件存在,则以只写追加,文件不存在的话,则创建后以只写追加内容。
b 二进制模式,字节流,将文件按照字节理解,与字符编码无关,字节操作都是使用bytes类型。
t 缺省的,文本模式,将文件的字节按照某种字符编码理解,按照字符操作。
+ 读写打开一个文件。给原来只读、只写方式打开提供缺失的读或者写能力。

- 文件指针

指向当前字节位置。

mode=r, 指针起始在0;mode=a,指针起始在EOF(End Of File, 即文件末尾).

tell() ,显示指针当前位置。
seek(offset[,whence]) ,移动文件指针位置,offset偏移多少字节,whence从那里开始。

文本模式下:

whence参数 含义
0 缺省值,表示从头开始,offset只能正整数。
1 表示从当前位置,offset只接受0。
2 表示从EOF开始,offset只接受0。

文本模式支持从开头向后偏移的方式。whence为1表示从当前位置开始偏移,但是只支持偏移0,相当于原地不动,所以没什么用。whence为2表示从EOF开始,只支持偏移0,相当于移动指针到EOF。seek是按照字节偏移的。

二进制模式下:

whence参数 含义
0 缺省值,表示从头开始,offset只能正整数。
1 表示从当前位置,offset可正可负。
2 表示从EOF开始,offset可正可负。

二进制模式支持任意起点的偏移,从头、从中间、从尾开始。向后seek可以越界,但是向前seek的时候不可以越界,否则抛异常。

  • buffering:缓冲区

    • -1表示使用缺省大小的buffer,如果是二进制模式,使用io.DEFAULT_BUFFER_SIZE值,默认是4096或者8912,如果是文本模式,如果是终端模式,是行缓存模式,如果不是,则使用二进制模式的策略。

    • 0只在二进制模式使用,表示关buffer。

    • 1在文本模式使用,表示使用行缓冲,意思是见到换行符就flush。字节模式下是1个字节就缓冲。
    • 大于1用于指定buffer的大小,字节模式可以超过io.DEFAULT_BUFFER_SIZE,直到设定的值超过后才把缓冲区。文本模式下,是io.DEFAULT_BUFFER_SIZE,flush后把当前字符串也写入磁盘。

    flush()将缓冲区数据写入磁盘。
    close()关闭前会调用flush()。

  • encoding:编码,进文本模式使用
    None表示使用缺省编码,依赖操作系统,windows缺省GBK,Linux缺省UTF-8。

  • 其他参数
    error :什么样的编码错误将被捕获,None和strict表示编码错误将抛出ValueError异常;ignore表示忽略。
    newline: 文本模式中,换行的转换。可以是None、空串、’\r’、’\n’、’\r\n’。读时,None表示’\r’、’\n’、’\r\n’都可以被转化为’\n’,’‘表示不会自动转换通用换行符;其他合法字符表示换行符就是指定字符,就会按照指定字符分行。写时,None表示’\n’都会被替换为系统缺省分隔符os.linesep;’\n’或”表示’\n’不替换;其他合法字符表示’\n’会被替换为指定的字符。
    closefd: 关闭文件描述符,True表示关闭它。False会在文件关闭后保持这个描述符。fileobj.fileno()查看。

read

read(size=-1) size表示读取的字符或字节,负数或者None表示读取到EOF。

行读取

readline(size=-1)一行行读取文件内容,size设置一次能读取行内几个字符或字节。
readlines(hint=-1)读取所有行的列表,指定hint则返回指定的行数。

write

write(s),把字符串s写入到文件中并返回字符的个数。
writelines(lines),将字符串列表写入文件。

close

flush并关闭文件对象,文件已经关闭,再次关闭没有任何效果。

其他

seekable() 是否可以seek
readable()是否可读
writeable()是否可写
closed 是否已经关闭

上下文管理


  1. 使用with…as 关键字
  2. 上下文管理的语句块并不会开启新的作用域
  3. with语句块执行完的时候,会自动关闭文件对象

你可能感兴趣的:(python,基础)