9.1 文件对象
文件对象不仅可用来访问普通的磁盘文件,也可以访问任何其他类型抽象层面上的“文件”。一旦设置了合适的“钩子”,就可以访问具有文件类型接口的其他对象。
9.2 文件内建函数 open() 和 file()
open() 内建函数成功打开文件后会返回一个文件对象,否则引发一个错误。当操作失败,产生一个IOError异常。
语法: file_object = open(file_name, access_mod='r', buffering=-1)
使用 r 和 U 打开的文件必须是已存在的。使用 w 打开的文件,若存在则先清空,再重新创建。 a 模式是为追加数据做准备的,所有写入数据都将追加到文件的末尾。若文件不存在,则自动创建。
若没有给定access_mod 默认使用 r 。
9.2.1 工厂函数 file()
open() 和 file() 具有相同的功能,可以任意替换。
9.2.2 通用换行符支持 UNS
不同平台用来表示行结束的符号是不同的。 Universal NEWLINE Support .当使用U 打开文件,所有行分隔符通过python的输入方法返回时都被替换为 \n 。UNS只用于读取文本文件。
9.3 文件内建方法
核心笔记:
行分隔符问题。
f = open('myfile', 'r')
data = [ line.strip() for line in f.readlines() ]
f.close()
9.4 文件内建属性
file.closed 表示文件已经被关闭。
file.encoding 文件所使用的编码
file.mode 文件打开时使用的访问模式
file.name 文件名
file.lines 未读取到行分隔符时为None, 只有一种行分隔符时为一个字符串,有多种行分隔符时,是一个列表。
file.softspace 为0表示输出一个数据后加上一个空格符,为1 表示不加。
9.5 标准文件
标准输入,标准输出,标准错误。 Python通过sys模块访问这些文件的句柄。
9.6 命令行参数
sys.argv属性提供对命令行参数的访问。
sys.argv 是命令行参数的列表
9.7 文件系统
9.9 永久存储模块
9.9.1 pickle 和 marshal 模块
将比基本类型复杂的对象转换为一个二进制数据集合,这样就可以把数据集合保存起来或者通过网络发送,然后再重新把数据集合恢复原来的对象格式。序列化。
这些模块本身没有提供“永久性存储”的功能,因为他们没有为对象提供名称空间,也没有提供对永久性对象的并发写入访问。marshal只能处理简单的Python对象(数字,序列,映射和代码对象),而pickle还可以处理递归对象,被不同地方多次引用的对象,以及用户定义的类和实例。
9.9.2 DBM风格的模块
anydbm模块会自动检测系统已安装的DBM兼容模块,并选择“最好“的一个。
9.9.3 shelve模块
shelve模块使用anydbm寻找合适的DBM模块,然后使用cPickle来完成存储转换过程。shelve模块允许对数据库文件进行并发的读访问,但是不允许共享读、写访问。