摘要: 创建、读和写文件的能力是许多程序所必需的。读取一个文件,对其中的内容进行一些处理,然后把结果写入到另外一个文件,应该是非常常用的一种处理模式。 读取文件 下面是一个简单的例子。数据是R自带的数据,进行了简化。数据如下: id Sepal.Len...
创建、读和写文件的能力是许多程序所必需的。读取一个文件,对其中的内容进行一些处理,然后把结果写入到另外一个文件,应该是非常常用的一种处理模式。
读取文件
下面是一个简单的例子。数据是R自带的数据,进行了简化。数据如下:
id Sepal.Length Sepal.Width Petal.Length Petal.Width 1 5.1 3.5 1.4 0.2 2 4.9 3.0 1.4 0.2 3 4.7 3.2 1.3 0.2 4 4.6 3.1 1.5 0.2 5 5.0 3.6 1.4 0.2 6 5.4 3.9 1.7 0.4 7 4.6 3.4 1.4 0.3 8 5.0 3.4 1.5 0.2 9 4.4 2.9 1.4 0.2 10 4.9 3.1 1.5 0.1 11 5.4 3.7 1.5 0.2 12 4.8 3.4 1.6 0.2 13 4.8 3.0 1.4 0.1 14 4.3 3.0 1.1 0.1 15 5.8 4.0 1.2 0.2 16 5.7 4.4 1.5 0.4
第一列为序号,后面是测量的数据。分别是萼片的长、宽,花瓣的长、宽。 把上面数据存储为data.dat,放到程序的同一目录下。程序的目的是计算萼片与花瓣的长宽比。注意读写文件的用法。
# -- coding:utf-8 -- import os import sys fi = open('data.dat') # 打开文件 cnts = fi.readlines() # 将所有数据读入 fo = open('result.dat', 'w') # 打开文件准备写入,注意'w' for cnt in cnts: cnt = cnt.strip() # 去掉每一条记录的换行与回车 # 对是否空行进行判断 if len(cnt) > 0: recs = cnt.split() # 对记录进行切分 # 第一行单独处理 if recs[0] == 'id': fo.write('id Sepal Petaln') else: # 只提取后四列数值项 vals = [float(x) for x in recs[1:] ] # 对数据进行一些计算 v1 = vals[0] / vals[1] v2 = vals[2] / vals[3] # 格式化结果,并写入到文件 fo.write('%s %10.2f %10.2fn' % (recs[0], v1, v2)) fo.close() fi.close()
通过指明我们希望打开的文件和模式来创建一个file类的实例。模式可以为读模式('r')、写模式('w')或追加模式('a')。事实上还有多得多的模式可以使用 。如果我们没有指定模式,读模式会作为默认的模式。
存储器
Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。 还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可 以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。
import cPickle as p shoplistfile = 'shoplist.data' shoplist = ['apple', 'mango', 'carrot', 10, 22, 35] # Write to the file f = file(shoplistfile, 'w') p.dump(shoplist, f) # dump the object to a file f.close() del shoplist # remove the shoplist # Read back from the storage f = file(shoplistfile) storedlist = p.load(f) print storedlist
为了在文件里储存一个对象,首先以写模式打开一个file对象,然后调用储存器模块的dump函数,把对象储存到打开的文件中。这个过程称为 储存 。接下来,我们使用pickle模块的load函数的返回来取回对象。这个过程称为 取储存 。