在Linux系统中,一切都是文件。但咱们一般说的文件是保存在磁盘上的图片、文档、数据、程序等等。而在程序的IO操做中,不少时候就是从磁盘读写文件。本节咱们讲解Python中的文件对象如何操做文件。cookie
经过Python内置函数open()
能够很容易的建立一个文件对象。open函数有不少参数,最经常使用的有两个,使用open函数最经常使用的方法是:open(filename, mode)
。函数
f = open('myfile', 'w')
第一个参数filename
是文件名的字符串,好比myfile
。第二个参数也是一个字符串,表示文件使用方式。mode
的可选项以下:编码
mode | 含义 |
---|---|
‘r’ | 以只读模式打开(默认) |
‘w’ | 以可写模式打开,并清楚文件内容(若是文件存在的话) |
‘x’ | 建立一个新文件并以可写模式打开 |
‘a’ | 以可写模式打开,从文件末尾开始写入(若是文件存在的话) |
‘b’ | 二进制模式 |
‘t’ | 文本模式(默认) |
’+’ | 打开一个已存在文件以便进行更新(读和写) |
其中的'b'
和't'
是指定文件内容是文本仍是二进制,其它都说是关于读写方式的。spa
'b'
是二进制模式打开文件,读写的数据都是字节对象(bytes),这个模式能够读写一切文件,包括文本文件,但读写文本文件时要注意编码的问题。't'
是文本模式下读写文件。读取时,默认会把平台特定的行结束符 (Unix 上的\n
, Windows 上的 \r\n
)转换为\n
。写入是,默认会把出现的\n
转换回平台特定的结束符。这种默认的“幕后修改”对文本文件来讲没有问题,但会破坏二进制数据(好比,JPEG或exe)文件中的数据。code
在使用open
建立文件对象时,最好使用 with
关键字。其好处是,当字句体结束后文件会正确关闭,即便在某个时刻引起了异常。而且with
比等效的try-finally
代码块更简短:对象
In [102]: with open('myfile') as f: ...: data = f.read() ...: In [103]: f.closed Out[103]: True
若是没使用with
关键字,就要调用f.close()
来关闭文件并当即释放它使用的系统资源。若是没有显示的关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。另一个风险是不一样的Python实现会在不一样的时间进行清理。图片
经过 with 语句或者调用 f.close() 关闭文件对象后,尝试使用该文件对象将自动失败。内存
经过上面的方法建立文件对象f
后,,咱们就能够经过其对应的方法读写数据了。资源
(1)写内容到文件:f.write(string)
把内容写入文件的方法是write()
方法,传递的对象必须是字符串(文本模式下)或字节对象(二进制模式下)。若是要写入其它类型的对象(好比,字典、列表等等),就要先把它们转换成字符串(文本模式下)或字节对象(二进制模式下)。rem
In [109]: f = open('myfile', 'w') In [110]: f.write('认真学Python,就是文件的所有内容。\n') Out[110]: 21 In [111]: f.close()
(2)读取文件内容:f.read(size)
它会读取文件里面的数据并将其返回为字符串(在文本模式下),或者字节对象(二进制模式)。参数size
是一个可选的整数参数,当size
被省略或为负的时候,读取文件的所有内容;若是文件的大小是机器内存的两倍或更大,那么可能出现错误。读取并返回的size大小的内容。若是已经读彻底部内容(到达文件末尾),将返回一个空字符串。
In [112]: f = open('myfile') In [113]: f.read() Out[113]: '认真学Python,就是文件的所有内容。\n' In [114]: f.read() Out[114]: ''
f.readline()
从文件读取一行,换行符\n
留住字符串末尾;f.readlines()
读取文件全部行,返回一个字符串的列表;
In [118]: f.readline() Out[118]: '认真学Python,就是文件的所有内容。\n' In [119]: f.seek(0) Out[119]: 0 In [120]: f.readlines() Out[120]: ['认真学Python,就是文件的所有内容。\n']
遍历文件的全部行,也能够用遍历文件对象的方式,这是内存高效、快速并简单的方式:
In [122]: for line in f: ...: print(line) ...: 认真学Python,就是文件的所有内容。
(3)文件对象的位置
前面的例子中,咱们已经读到文件的末尾,若是要再从头读的话就要调用f.seek(0)
来设置文件对象的位置到文件开头。这个方法有两个参数:f.seek(cookie, whence=0)
whence 是相对位置,它有三种相对位置:
如何查看当前位置呢?调用f.tell()
方法。