天天看点

【2019.05.30】Python 文件读写(Python IO)open()参数with - 上下文管理器文件对象的方法

open()参数

【2019.05.30】Python 文件读写(Python IO)open()参数with - 上下文管理器文件对象的方法
  • 其中的’b’和’t’是指定文件内容是文本还是二进制,其它都说是关于读写方式的。
  • 'b’是二进制模式打开文件,读写的数据都是字节对象(bytes),这个模式可以读写一切文件,包括文本文件,但读写文本文件时要注意编码的问题。
  • 't’是文本模式下读写文件。读取时,默认会把平台特定的行结束符 (Unix 上的\n, Windows 上的 \r\n)转换为\n。写入是,默认会把出现的\n 转换回平台特定的结束符。这种默认的“幕后修改”对文本文件来说没有问题,但会破坏二进制数据(比如,JPEG或exe)文件中的数据。

with - 上下文管理器

在使用open创建文件对象时,最好使用 with 关键字。其好处是,当字句体结束后文件会正确关闭,即使在某个时刻引发了异常。并且with比等效的try-finally代码块更简短:

with open('myfile') as f: 
     data = f.read() 
           

如果没使用with关键字,就要调用f.close()来关闭文件并立即释放它使用的系统资源。如果没有显示的关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。另外一个风险是不同的Python实现会在不同的时间进行清理。

通过 with 语句或者调用 f.close() 关闭文件对象后,尝试使用该文件对象将自动失败。

文件对象的方法

(1)写内容到文件:f.write(string)

把内容写入文件的方法是write()方法,传递的对象必须是字符串(文本模式下)或字节对象(二进制模式下)。如果要写入其它类型的对象(比如,字典、列表等等),就要先把它们转换成字符串(文本模式下)或字节对象(二进制模式下)。

(2)读取文件内容:f.read(size)

它会读取文件里面的数据并将其返回为字符串(在文本模式下),或者字节对象(二进制模式)。参数size是一个可选的整数参数,当size被省略或为负的时候,读取文件的全部内容;如果文件的大小是机器内存的两倍或更大,那么可能出现错误。读取并返回的size大小的内容。如果已经读完全部内容(到达文件末尾),将返回一个空字符串。

(3)文件对象的位置

前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用f.seek(0)来设置文件对象的位置到文件开头。这个方法有两个参数:f.seek(cookie, whence=0)

cookie 是位置偏移量

whence 是相对位置,它有三种相对位置:

0 文件开头,偏移量是0或整数;

1 当前位置,偏移量可以是负数;

2 文件末尾,偏移量通常是负数;

如何查看当前位置呢?调用f.tell()方法。