我们将在本章介绍以下案例:
从分隔符文本文件中读取数据
发送电子邮件
访问FTP服务器中的文件
创建ZIP文件
读取XML文件
引言
在本章中,你将学习如何编写Python脚本来执行常用的处理任务。这些任务包括读写分隔符文本文件,发送电子邮件,与FTP服务器交互操作,创建.zip文件以及读写JSON和XML文件。GIS程序员应当了解如何在Python脚本来完成这些功能。
从分隔符文本文件中读取数据
对于GIS程序员来说使用Python处理文件是非常重要的环节。文本文件经常作为不同系统之间的数据交换格式。文本文件简单,跨平台并且易于处理。逗号分隔符文本文件和制表符分隔符文本文件是最为常用的形式。对于GIS程序员来说读取包含X,Y坐标以及其他属性信息的逗号分隔符文本文件是一类常见的处理任务。这些读取后信息再转换成像shapefile或地理数据库的GIS数据格式。
Getting ready
使用Python的文件处理功能前,你必须首先打开文件。文件打开后,文件中的数据就可以通过Python提供的功能进行处理,最后关闭文件。处理完成后要记得关闭文件。
在本案例中,你将学习如何对一个逗号分隔符文本文件执行打开,读取,处理并关闭操作。
How to do it...
按照以下步骤创建Python脚本来读取逗号分隔符文本文件:
1.在C:\ArcpyBook\data文件夹中找到一个N_America.A2007275.txt的文件。用文本编辑器打开该文件,你会看到如下内容:
18.102,-94.353,310.7,1.3,1.1,10/02/2007,0420,T,72
19.300,-89.925,313.6,1.1,1.0,10/02/2007,0420,T,82
19.310,-89.927,309.9,1.1,1.0,10/02/2007,0420,T,68
26.888,-101.421,307.3,2.7,1.6,10/02/2007,0425,T,53
26.879,-101.425,306.4,2.7,1.6,10/02/2007,0425,T,45
36.915,-97.132,342.4,1.0,1.0,10/02/2007,0425,T,100
................
该文件包含的火情数据是从2007年10月02日当天卫星遥感影像判断获取。每行数据包含了经纬度信息以及其他相关信息,比如日期和时间,卫星类型,可信度等等。在本案例中,你将提取出纬度,经度和可信度信息。
2.打开IDLE,创建一个脚本文件并保存为
C:\ArcpyBook\Appendix2\ReadDelimitedTextFile.py文件。
3.调用Pyhon的open()函数来打开要读取的文件:
f = open("C:/ArcpyBook/data/N_America.A2007275.txt","r")
4.读取文本文件中的内容并写入到列表中:
lstFires = f.readlines()
5.添加一个for循环语句来迭代遍历lstFires变量中的所有行:
for fire in lstFires:
6.调用split()函数并使用逗号作为分隔符,将分离后的值保存到列表中,然后赋值给变量lstValues。保证语句的缩进使其位于for语句中:
lstValues = fire.split(",")
7.使用索引值来获取纬度,经度和可信度,并分别创建新的变量:
latitude = float(lstValues[0])
longitude = float(lstValues[1])
confid = int(lstValues[8])
8.使用print语句打印所有值:
print "The latitude is: " + str(latitude) + " The longtitude is " + str(longtitude) + "The confidence value is " + str(confid)
9.关闭文件:
f.close()
10.完整代码如下:
f = open("C:/ArcpyBook/data/N_America.A2007275.txt","r")
lstFires = f.readlines()
for fire in lstFires:
lstValues = fire.split(",")
latitude = float(lstValues[0])
longitude = float(lstValues[1])
confid = int(lstValues[8])
print "The latitude is: " + str(latitude) + " The longtitude is " + str(longtitude) + "The confidence value is " + str(confid)
f.close()
11.保存并运行脚本。你将看到如下结果显示:
The latitude is: 18.102 The longitude is: -94.353 The confidence value is: 72
The latitude is: 19.3 The longitude is: -89.925 The confidence value is: 82
The latitude is: 19.31 The longitude is: -89.927 The confidence value is: 68
The latitude is: 26.888 The longitude is: -101.421 The confidence value is: 53
The latitude is: 26.879 The longitude is: -101.425 The confidence value is: 45
The latitude is: 36.915 The longitude is: -97.132 The confidence value is: 100
...................
The latitude is: 54.19 The longitude is: -122.502 The confidence value is: 92
How it works...
Python中open()函数创建一个文件对象,该对象引用一个链接地址来指向计算机中的文件。open()函数中的第一个参数是你想要打开文件的路径。第二个参数指定一种模式,该模式通常是只读(r),写入(w)或添加(a)。r模式表明你打开文件进行只读操作,而w模式则表明你打开文件要进行写入操作。如果你以写入模式打开的文件已存在,那么Python就会覆盖掉该文件中已有数据,因此使用该模式应当注意。添加模式(a)则会打开文件进行写入操作,但是不会覆盖已有数据,而是在文件末尾添加写入的数据。在本案例中,我们以只读模式打开N_America.A2007275.txt文件。
readlines()函数会读取整个文件内容并写入一个Python列表中。该列表保存到变量lstFires。文本文件中的每一行数据是列表中的一个元素。由于该函数会读取整个文件到列表中,因此调用该方法时需要注意,一个大文件会显著影响性能。
for循环语句用于迭代遍历lstFires中的每一个值,在该语句中的split()函数用于从以某种分隔符分隔文本行中创建一个列表对象。本案例中的文件是以逗号作为分隔符,因此我们可以调用split(",")语句。你还可以使用其他像制表符,空格或其他分隔符来分割文本。split()函数创建的列表