购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 文件读写操作

本节将会介绍一些常用的文件读写操作,包括创建文件、打开文件、读取文件和写入文件等。Python支持多种文件格式的操作,包括 二进制文件 (binary)、 txt文本文件 (text)、 逗号分隔值CSV文件 (Comma-Separated Values, CSV)、 HTML超文本标记语言文件 (Hypertext Markup Language, HTML)、 JSON文件 (JavaScript Object Notation, JS对象简谱)。在Python中进行文件操作时,需要先打开文件,再读/写文件,最后关闭文件,如图2-13所示。

图2-13 Python中的文件操作

下面是一个许多工作都会遇到的例子。有一批CSV文件需要处理,这些CSV文件中的数据量很大。具体需要完成的操作是把文件中所有的数值增大十倍。这些CSV文件是以一个等差数列的整数部分命名,这个等差数列的首项和公差均是533.33,尾项是13333.25。为了模拟这个过程,首先用Python的随机数生成器生成这些文件和数据,然后通过逐个读取这些CSV文件中的数据,将数据放大十倍,并分别写入后缀为xlsx的文件中,这些xlsx文件的名字同样是前文提到的等差数列的整数部分具体见如下代码。

显然,当CSV文件中的数据量很大,并且CSV文件个数很多时,使用Python代码能大大提高工作效率。在实际应用过程中,往往还需要对文件中的数据进行更复杂的处理,Python的易用性能可以帮助用户极大地提高工作效率。

Python提供了6种文件操作模式,包括r、r+、w、w+、a、a+。如表2-11对比了这6种文件操作模式的相似之处和不同之处。这里详细地阐述这些文件操作模式的细微区别。虽然r和r+都可以用来读取文件内容,但r+可以在文件中写入内容。相对于w,w+除了可以向文件写入内容,还可以用来读取文件内容。a和a+都可以在文件末尾添加内容,但a不能用来读取文件,而a+可以。r、r+、w、w+在刚打开文件时,指针均位于文件开头,而a和a+的指针在文件末尾。当文件不存在时,使用r和r+会报错,而w、w+、a、a+则会创建该空文件。当文件已经存在时,使用w和w+会清空原文件内容并从文件开头写入新的内容。图2-14、图2-15和图2-16用一简单的例子对比了r+、w+和a+将内容写入文件中的细微区别。

表2-11 文件模式对比

如图2-14所示为r+模式将字符串“Hi”写入“test.txt”时的情况。当“test.txt”不存在时,使用a+模式进行写入时,会提示“No such file: 'test.txt'”错误,“test.txt”文件也不会被创建。当“test.txt”文件已经存在时,则字符串“Hi”会写入“test.txt”中。

图2-14 r+模式

如图2-15所示为w+模式将字符串“Hi”写入“test.txt”时的情况。当“test.txt”文件不存在时,使用w+模式进行写入时,系统会自动创建“test.txt”文件并将字符串“Hi”写入该文件中。当“test.txt”文件已经存在并且包含字符“##”时,w+模式会先清空文件中原有的内容,并将字符串“Hi”写入“test.txt”中。

如图2-16所示为a+模式将字符串“Hi”写入“test.txt”时的情况。和w+模式类似,当“test.txt”文件不存在时,使用a+模式进行写入时,系统会自动创建“test.txt”文件并将字符串“Hi”写入该文件中。当“test.txt”文件已经存在并且包含字符“##”时,a+模式会保留原文件内容,并将字符串“Hi”追加到“test.txt”末尾。

图2-15 w+模式

图2-16 a+模式

表2-12给出了一些常用的文件操作方法,包括关闭文件、读取和写入等。

表2-12 常用文件操作方法

在以下的例子中,首先在文件夹相对路径中创建一个叫“Week.txt”的文件,并写入多行内容,然后读取这些内容,再然后在显示窗口显示每行的内容,最后关闭这个“Week.txt”文件。被打开的文件对象也是一个迭代器,因此可以在for循环中被调用,用来读取被打开的文件对象的每一行内容。

在上述例子中,close()方法被用来关闭被打开的文件对象。当用户尝试在指定的文件中写入内容时,这些内容并非马上写入文件,而是先放入 内存缓冲区 (buffer),然后Python等待并确认用户完成所有的文件操作后再关闭文件对象。使用close()方法就是用来告诉Python,用户所有的文件操作已经结束。尽管Python有 引入计数 (reference counting)和 垃圾回收机制 (garbage collection)来帮助用户关闭文件对象,为了避免不必要的错误,读者应当在完成所有的文件操作后手动关闭文件对象。

Python还提供了with open()as的文件操作方式,用来帮助用户关闭文件对象。with和as均是关键字。当用户使用with open()as方式打开文件后,该文件对象会被创建并打开,在完成一些用户指定的读写操作后,Python会自动关闭该文件对象,这样可以避免用户忘记显示关闭对象。

with open("File_name")as File_object_name:
    File_object_name.write()

请读者自行运行如下代码。 or8I2jXUcfDfU8SG1i2U+QcIGBkC1kji+Gu7iJqkO+hQOkj/Tq0m560Sz2LeeZ9T

点击中间区域
呼出菜单
上一章
目录
下一章
×