[笔记] Python核心编程 第九章

文件有两个内建函数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

你可能感兴趣的:([笔记] Python核心编程 第九章)