文件有两个内建函数open()和file(),推荐用open(),file在Python3.x版本上已经被废弃
open(name[, mode[, buffering]])
name是包含要打开文件名字的字符串,它可以是相对路径,也可以是绝对路径
mode表示文件打开的模式,有'r','w','a','U'等等。'r'和'U'模式必须要求文件已经存在,'w'模式如果文件不存在会创建,如果存在会清空文件内容;'a'模式如果文件不存在也会创建文件,如果文件存在,会在文件的EOF之后追加内容。
buffering用于指示访问文件所采用的缓冲方式,0表示不缓冲,1表示只缓冲一行,任何大于1的数字表示使用给定值作为缓冲区大小,不提供该参数或者使用负值表示使用系统默认的缓冲机制。
文件模式 | 操作 |
---|---|
r | 以读方式打开 |
rU或者U | 以读方式打开,同时提供通用换行符支持 |
w | 以写的方式打开(必要时清空文件内容) |
a | 以追加模式打开(从EOF开始追加,必要时创建新文件) |
r+ | 以读写模式打开,文件必须已经存在 |
w+ | 以读写模式打开,文件可以不存在,不存在时会自动创建新文件 |
a+ | 以读写模式打开,行为模式参照a |
rb | 以二进制读模式打开 |
wb | 以二进制写模式打开,参照w |
ab | 以二进制追加模式打开,参照a |
rb+ | 以二进制读写模式打开,参照r+ |
wb+ | 以二进制读写模式打开,参照w+ |
ab+ | 以二进制追加模式打开,参照a+ |
文件对象的访问模式
文件模式 | 操作 |
---|---|
r | 以读方式打开 |
rU或者U | 以读方式打开,同时提供通用换行符支持 |
w | 以写的方式打开(必要时清空文件内容) |
a | 以追加模式打开(从EOF开始追加,必要时创建新文件) |
r+ | 以读写模式打开,文件必须已经存在 |
w+ | 以读写模式打开,文件可以不存在,不存在时会自动创建新文件 |
a+ | 以读写模式打开,行为模式参照a |
rb | 以二进制读模式打开 |
wb | 以二进制写模式打开,参照w |
ab | 以二进制追加模式打开,参照a |
rb+ | 以二进制读写模式打开,参照r+ |
wb+ | 以二进制读写模式打开,参照w+ |
ab+ | 以二进制追加模式打开,参照a+ |
注意:'b'不能作为第一个字符出现,即不能写成'br';另外对于所有POSIX兼容的Unix系统(包括Linux)来说,'b'是可以有可无的,因为它们把所有文件都当做二进制文件,包括文本文件,所以在POSIX兼容的系统下可以忽略'b';当然如果你要移植到其他非Unix系统,还是加上'b'比较好
通用换行符支持 UNS (Universal NEWLINES Support),会在通过Python的输入方法(例如read*())读取文件时将返回内容的各种换行符都替换成NEWLINES(\n),这个特性支持包含不同类型换行符的文件。但UNS只能用于读取文本文件。
文件的内建函数,read*()或者write*()都不会自动处理换行符,所以需要程序员自己处理。
为了提高可移植性,建议用os模块里的os.linesep来代替手动输入'\r','\n'之类的换行符。因为os.linesep就是当前系统的换行符。
file.seek(offset[, whence])这个内建方法可以在文件中移动文件指针到不同的位置。
offset代表相对于某个位置的字节偏移量。
whence表示偏移量的相对位置,有0,1,2三种常亮,默认为0,表示从文件开头计算偏移量,1表示从文件指针的当前位置计算,2表示从文件末尾算起。
文件对象方法 | 操作 |
---|---|
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(size=0) | 读取文件的所有行并作为一个列表返回(包含所有的换行符);如果给定size且大于0,,那么将返回总和大约为size字节的行(大小由缓冲器容量的下一个值决定)(比如说缓冲器的大小只能为4K的倍数,如果size为15K,则最后返回的可能是16K) |
file.seek(offset, whence=0) | 在文件中移动文件指针,从whence(0表示文件起始,1表示当前位置,2表示文件末尾)偏移offset字节 |
file.tell() | 返回当前文件指针在文件中的位置 |
file.truncate(size=file.tell()) | 截取文件到最大size字节,默认为当前位置,截取之后会改变文件内容 |
file.write(str) | 向文件中写入字符串 |
file.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
文件对象方法
文件对象方法 | 操作 |
---|---|
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(size=0) | 读取文件的所有行并作为一个列表返回(包含所有的换行符);如果给定size且大于0,,那么将返回总和大约为size字节的行(大小由缓冲器容量的下一个值决定)(比如说缓冲器的大小只能为4K的倍数,如果size为15K,则最后返回的可能是16K) |
file.seek(offset, whence=0) | 在文件中移动文件指针,从whence(0表示文件起始,1表示当前位置,2表示文件末尾)偏移offset字节 |
file.tell() | 返回当前文件指针在文件中的位置 |
file.truncate(size=file.tell()) | 截取文件到最大size字节,默认为当前位置,截取之后会改变文件内容 |
file.write(str) | 向文件中写入字符串 |
file.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
file.truncate()如果在打开文件之后立即调用,因为当前位置是0,所以调用truncate方法之后会清空文件
文件对象的属性 | 描述 |
---|---|
file.closed | 表示文件是否已经被关闭,未关闭返回False |
file.encoding | 文件所使用的编码——当Unicode字符串被写入数据时,它们将自动使用file.encoding转换为字节字符串;若file.encoding为None时使用系统默认的编码 |
file.mode | 文件打开时使用的访问模式 |
file.name | 文件名 |
file.newlines | 为读取到换行符时为None,只有一种换行符时为一个字符串,当文件中有多种类型的换行符时,则为一个包含所有当前文件换行符的列表 |
file.softspace | 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用 |
文件内建属性
文件对象的属性 | 描述 |
---|---|
file.closed | 表示文件是否已经被关闭,未关闭返回False |
file.encoding | 文件所使用的编码——当Unicode字符串被写入数据时,它们将自动使用file.encoding转换为字节字符串;若file.encoding为None时使用系统默认的编码 |
file.mode | 文件打开时使用的访问模式 |
file.name | 文件名 |
file.newlines | 为读取到换行符时为None,只有一种换行符时为一个字符串,当文件中有多种类型的换行符时,则为一个包含所有当前文件换行符的列表 |
file.softspace | 为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用 |
Python提供了两个模块用来处理命令行参数——getopt和optparse,其中getopt模块较为简单
文件系统详见P221
网友评论