Python教程:读写文件

Python与开源GIS

Python教程:读写文件

2015-01-29 作者: giser 浏览: 2015 次

摘要: 创建、读和写文件的能力是许多程序所必需的。读取一个文件,对其中的内容进行一些处理,然后把结果写入到另外一个文件,应该是非常常用的一种处理模式。 读取文件 下面是一个简单的例子。数据是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函数的返回来取回对象。这个过程称为 取储存 。

关注“开源集思”公众号
获取免费资源

随机推荐


Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org