简述
文件输入输出操作在编程中很常见。因此对这部分进行一些学习。文件是连续的字节序列,因此文件输入输出是基于文件系统的字节流操作。Python将一个文件作为一个对象来处理。
文件打开与关闭
open()函数用于打开一个文件对象,可使用相对路径或绝对路径,打开的是一个文件对象,实际就是一指针,因此应该不会开缓存来放文件数据。
file()函数(工厂函数)和open()同样的功能。
close()通过关闭文件来结束对它的访问。
fileno()方法返回打开文件的描述符。
flush()方法会直接把内部缓冲区中的数据立刻写入文件,而不是被动地等待输出缓冲区被写入。
isatty()是一个布尔内建函数,当文件是一个类tty设备时返回True,否则返回False。
truncate()方法将文件截取到当前文件指针位置或者到给定size,以字节为单位。
文件输入
read()读取字节到字符串中,read相关的应当是会开缓存来存放读取的文件数据的。
readline()读取已打开的文件的一行。
readlines()读取所有(剩余的)行然后把它们作为一个字符串列表返回。
文件输出
write()把含有文本数据或二进制数据块的字符串写入到文件中。
writelines()是针对列表的操作,接受一个字符串列表作为参数,将它们写入文件。
文件内移动
seek()可以在文件中移动文件指针到不同的位置,在打开文件后文件指针默认应当是指向文件最开始的。该方法也可以找到文件的结尾。
text()提供当前文件指针在文件中的位置,从文件起始算起,以字节为单位。
文件迭代
for eachLine in f:
;
一行一行的访问文件,eachLine代表文本文件的一行,对于二进制格式文件的处理看来不适用。
文件对象方法
方法 | 操作 |
---|---|
file.close() | 关闭文件 |
file.fileno() | 返回文件的描述符(file descriptor, FD, 整型值) |
file.flush() | 刷新文件的内部缓冲区 |
file.isatty() | 判断file是否是一个类tty设备 |
file.next() | 返回文件的下一行(类似于file.readline()),或在没有其他行时引发StopIteration异常 |
file.read(size=-1) | 从文件读取size个字节,当未给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回 |
file.readline(size=-1) | 从文件读取并返回一行(包括行结束符),或返回最大size个字符 |
file.readlines(sizhint=0) | 读取文件的所有行并作为一个列表返回(包含所有的行结束符),如果给定sizhint且大于0,那么将返回总和大约为sizhint字节的行(大小由缓冲器容量的下一个值决定)(比如说缓冲器的大小只能为4K的倍数,如果sizhint为15K,则最后返回的可能是16K) |
file.xreadlines() | 用于迭代,可以替换readlines()的一个更高效的方法 |
file.seek(off,whence=0) | 在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off字节 |
file.tell() | 返回当前在文件中的位置 |
file.truncate(size=file.tell()) | 截取文件到最大size字节,默认为当前文件位置 |
file.write(str) | 向文件写入字符串 |
file.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
文件内建属性
属性 | 描述 |
---|---|
file.closed | 表示文件已经被关闭,否则为False |
file.encoding | 文件所使用的编码 |
file.mode | Access文件打开时使用的访问模式 |
file.name | 文件名 |
file.newlines | 未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束符的列表 |
file.softspace | 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用 |