文件——使用文件

未匹配的标注

一旦使用open创建了一个文件对象,就可以调用它的方法来对相关外部文件进行读写。在所有情况下,文件文本在Python程序中采用字符串的形式;读取文件以字符串返回其内容,且内容作为字符串传给写方法。读写方法有多种类型;表9-2列出了最常见的。下面是一些基本的用法说明:

文件迭代器最适合于读行

虽然表中的读写方法很常见,但记住当今从文本文件读行的最好方式可能是完全不读取文件——在第14章将看到:文件还有一个迭代器,它自动在 for循环,列表comprehension或其他迭代上下文中一次读取一行。

内容是字符串,而非对象

注意在表9-2中从文件读取的数据总是以字符串回到脚本,所以如果字符串不是你所需要的,必须将其转换为不同的Python对象类型。类似地,不像 print 操作,当数据到文件时,Python不会自动地添加任何格式和转换对象为字符串——必须发送已格式化的字符串。因此,当处理文件时,已见过的用来在对象和字符串之间转换的工具(比如:intfloatstr 和字符串格式化表达式和方法)会很有用。

Python 还包含了高级标准库工具,用于处理通用对象存储(pickle模块),用于处理文件中的打包好的二进制数据(struct模块),还有用于处理特殊类型的内容如 JSON,XML 和 CSV 文本。在本章和本书的稍后将在实战中学习这些东西,但Python的手册完整地记录了它们。

文件被缓冲且可搜索

输出文件默认总是缓冲的,它意味着写的文本可能不会被立刻从内存传输到磁盘——关闭文件,或运行其 flush 方法,都强迫缓冲数据被写到文件。可以使用open中的额外参数来避免缓冲,但它可能会降低性能。Python文件基于字节偏移量还是随机访问的——它们的 seek 方法允许脚本在特定的位置跳来跳去地读写。

close 常是可选的:在垃圾回收时自动关闭

调用文件 close 方法终结了到外部文件的连接,释放了其系统资源,且如果有任何内容还在内存中会将其缓冲的输出写到磁盘。如第6章中讨论的,在Python中只要对象不再被程序中任何地方所引用,其内存空间是被自动回收的。当文件对象被回收时,如果它们仍打开着,Python还会自动关闭文件(这在关闭程序时也会发生)。这意味着在标准Python中不总是需要手动关闭文件,特别是在运行时很短的简单脚本中的那些文件,和被单行或表达式使用的临时文件。

另一方面,包含手动的 close 调用并不会有坏处,还可能是一个要形成的好习惯,特别在长期运行的系统中。严格地说,文件的这个“在回收时自动关闭”的特性并不是语言定义的一部分——它可能随时更改,当你期望它在交互式shell中时可能不会发生,而且可能不会和在其它Python实现(它们的垃圾回收器可能不会在和标准CPython同样的时间点回收和关闭文件)中一样。事实上,当在循环中打开许多文件时,除了CPython的Python可能都需要 close调用来立刻释放系统资源(在垃圾回收能抽出时间来释放对象前)。而且,close 调用有时还被要求用来清空还未被回收的文件对象的缓冲输出。要了解保证自动文件关闭的另一个方法,请参阅本章稍后关于文件对象上下文管理器的讨论(和Python 2.6,2.7和3.X中的 with/as 一起使用)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~