Python支持大部分在其他语言中出现的编程结构。在本章内容中,我们将会涉及到许多Python支持的编程结构。我们将会首先介绍如何创建一个新的Python脚本以及如何修改已有脚本。之后我们将深入了解Python的语言特性,比如添加注释,创建变量,变量赋值以及Python的自动代码补齐功能等,了解这些内容将让你在使用Python编程的时候更为简便。
接下来我们会介绍Python内置的数据类型,包括字符型,数值型,列表和字典等。类和对象是面向对象编程和Python语言中两个基本的概念。你在ArcGIS中编写地理处理脚本时会经常使用到上述这些复杂的数据结构。
另外,我们还将介绍条件语句和循环语句以及with语句,这些语句在涉及到ArcPy数据访问模块(Data Acccess module)中新的游标(cursor)对象时会经常使用。最后你还会了解到如何访问模块,这些模块可以为Python提供更多附加功能。
该部分包含以下内容:
如何创建并编辑Python脚本
Python语言特性
注释和变量
Python内置数据类型(字符,数字,列表和字典)
复杂的数据结构
循环语句
Python其他功能
IDLE
我在前言中提到过,ArcGIS桌面软件安装后,Python以及用于编写代码的IDLE工具也会一同安装。IDLE是集成开发环境的缩写(Integrated DeveLopment Environment)。由于IDLE在每一个ArcGIS桌面软件安装环境中都可以使用,我们使用IDLE开发环境来编写本书中的大部分代码,才外还会使用ArcGIS软件中内置的Python窗口。你作为程序员还可能会更钟意其他的开发工具,你也可以使用这些工具来编写代码。
Python shell窗口
点击开始 | 所有程序 | ArcGIS | Python2.7 | IDLE打开Python的IDLE开发环境。注意Python版本会因为安装的ArcGIS软件版本不同而不同。比如,ArcGIS10.0版本安装的是Python2.6,而ArcGIS 10.1版本安装的则是Python2.7。
Python的shell窗口类似于下面的截图:
Python的shell窗口用于显示脚本生成的结果消息和错误消息。对于初学者来讲,通常会误认为地处理脚本代码是在shell窗口中编写。事实上并非如此。你需要打开另一个单独的代码窗口来保存你的脚本。
尽管shell窗口不能用来编写完整脚本代码,但可以以交互方式来即时获取代码反馈信息。ArcGIS软件中包含一个内置Python shell窗口也是使用相同的方式。我们将在下个章节来介绍ArcGIS Python 窗口。
Python 脚本窗口
在IDLE中,脚本代码编写是在一个称作Python 脚本窗口(Python script window)的独立窗体中完成。点击IDLE shell窗口中的File | New Window来打开一个新的代码窗口。Python脚本窗口如下图所示:
在这个新打开的脚本窗口中你就可以编写代码了。每个脚本需要保存到本地磁盘或者网络驱动器中。脚本文件默认的文件扩展名为.py。
编辑已有Python脚本
右键单击已有的Python脚本文件选择Edit with IDLE,会弹出一个新的shell窗口以及载入脚本代码内容的Python脚本编辑器。如下面的截图:
在这个示例中,我们已经在IDLE中载入了ListFeatureClasses.py脚本文件。代码内容出现在脚本窗口中:
现在脚本窗口已经打开,你就可以开始编写或修改代码了。你还可以在IDLE中执行一些简单的代码调试工作。代码调试是指发现并修改代码中错误的过程。
IDLE中运行脚本
在IDLE代码窗口中编写完地理处理脚本或者打开了一个脚本文件之后,你就可以在IDLE中执行代码。运行脚本之前,你可以先在IDLE中进行代码的语法检查。在代码窗口中,点击Run | Check Module来执行语法检查。
所有的语法错误都会显示在shell窗口中。如果没有发现任何语法错误的话,你将只会看到弹出的shell窗口。虽然IDLE可以用来检查语法错误,但是并没有提供逻辑错误检查工具以及像PythonWin或者Wingware的开发环境提供的高级调试功能。
确认代码中没有语法错误后,你就可以运行脚本啦。点击Run | Run Module在运行脚本:
所有的错误消息以及print语句和系统消息结果都会显示在shell窗口中。print语句可以将字符串输出到shell窗口中。该语句通常用于更新一个正在运行脚本的状态或者代码调试。
Python语言基础
为了能够更好地编写ArcGIS地理处理脚本,你需要先了解一些基本的Python语言结构。尽管相对其他大部分编程语言,Python更容易学习,但是仍需要花费一定时间来学习并熟练使用。该部分内容将向你介绍如何创建变量,如何给变量赋不同数据类型的值,如何理解赋值给变量的不同数据类型,如何使用不同类型的语句,如何使用对象,如何读写文件以及如何导入第三方的Python模块。
注释
Python脚本需要遵循一个通用的结构。每个脚本的开头部分应作为说明文档,用以详细描述脚本名称,作者以及脚本功能的总体描述。说明文档部分在Python中可以通过注释功能来完成。注释指用来添加到脚本中作为脚本功能说明性文档的代码语句。这些代码以#或者##开始,后面跟着你需要说明解释的文本内容。Python解释器不会处理这类代码。它们只是解释说明代码意义。如下图所示,注释行代码用红色字体显示。你也应该尝试在脚本中添加注释来描述脚本中的重要部分。无论对你或对其他程序员这对今后修改代码都是非常有用的。
导入模块
尽管Python包含了大量的内置功能,你还是会经常需要访问一些专门的功能包, 功能包又包含在一些外部模块中。举个例子,Math模块包含了与数值处理有关的功能,R模块则提供了数据统计分析的功能。使用import语句导入模块。编写ArcGIS地处理脚本时,通常就需要导入ArcPy模块,该模块是用于访问ArcGIS中提供的GIS工具和函数的Python包。import语句会是脚本中的第一行代码(不包括注释部分):
import arcpy,os
变量
从高层面来说,变量可以看做是脚本运行过程中用来存储值的计算机内存区域。在Python中,通过给定名称和值来定义变量。变量赋值之后只要简单地引用变量名称,就可以在脚本中的不同位置来获取该变量值。比如,你创建了一个包含要素类名称的变量,该变量之后被Buffer工具调用生成了一个新的要素集。只要简单地给定一个名称,然后紧跟着赋值运算符(=)和要赋的值就可以创建一个变量:
fcParcels = "Parcels"
fcStreets = "Streets"
下表说明了变量名和通过上面的示例代码赋值给变量名的变量值的关系:
变量名
变量值
fcParcels
Parcels
fcStreets
Streets
你在创建变量时候必须遵守一些命名规则,主要包含以下内容:
使用字母,数字和下划线
首字母必须为字母
除了下划线不能包含其他特殊字符
不能使用Python关键字
大概有几十个Python关键字