2.15 文件和内建函数open()、file()
在你已经习惯一门语言的语法之后,文件访问是相当重要的一环。在一些工作做完之后,将它保存到持久存储是很重要的。
如何打开文件
file__name变量包含我们希望打开的文件的字符串名字,access_mode中Y表示读取,‘w’表示写入,‘a’表示添加。其他可能用到的标识还有‘+’表示读写,‘b’表示二进制访问。如果未提供access_mode,默认值为‘r’。如果open()成功,一个文件对象句柄会被返回。所有后续的文件操作都必须通ã此文件句柄进行。当一个文件对象返回之后,我们就可以访问它的一些方法,比如readlines()和close()。文件对象的方法属性也必须通过句点属性标识法访问(参阅下面的核心笔记)。
核心笔记:什么是属性?
属性是与数据有关的项目。属性可以是简单的数据值,也可以是可执行对象,比如函数和方法。哪些对象拥有属性呢?很多。类、模块、文件和复数等对象都拥有属性。我如何访问对象属性?使用句点属性标识法。也就是说在对象名和属性名之间加一个句点(.):object.attribute。
下面有一些代码,提示用户输入文件名,然后打开一个文件,并显示它的内容到屏幕上。
我们的代码没有用循环一次取一行显示,而是做了点改变。我们一次读入文件地所有行,然后关闭文件,再迭代每一行输出。这样写代码的好处是能够快速完整地访问文件。内容输出和文件访问不必交替进行。这样代码更清晰,而且将不相关的任务区分开来。需要注意的一点是文件的大小。上面的代码适用于文件大小适中的文件。对于很大的文件来说,上面的代码会占用太多的内存,这时你最好一次读一行(下一节有一个好例子)。
我们的代码中另一个有趣的语句是我们又一次在print语句中使用逗号来抑制自动生成的换行符号。为什么要这样做?因为文件中的每行文本已经自带了换行字符,如果我们不抑制print语句产生的换行符号,文本在显示时就会有额外的空行产生。
file()内建函数是最近才添加到Python当中的。它的功能等同于open(),不过file()这个名字可以更确切地表明它是一个工厂函数(生成文件对象)。类似于intO生成整型对象,dictO生成字典对象。在第9章,我们将详细介绍文件对象和它们的内建方法属性,以及如何访问本地文件系统。请参考第9章以了解详细信息。