(Concepts and Discussion)
Python is a high-level programming language
Open source and community driven
“Batteries Included”
a standard distribution includes many modules
Dynamic typed
Source can be compiled or run just-in-time
Similar to perl, tcl, ruby
Unlike AML and Avenue, there is a
considerable base of developers already
using the language
“Tried and true” language that has been in
development since 1991
Can interface with the Component Object
Model (COM) used by Windows
Can interface with Open Source GIS toolsets
Visual Basic is still the method of configuring
and customizing ArcMap
If you have a button on the toolbar, it’s VB
Python scripts can be placed in ArcToolbox
Python can be run from the command line
without ArcMap or ArcCatalog being open
Using just the GIS Engine, lower overhead
Rapid prototyping, ease of authoring, etc.
IDLE – a cross-platform Python development
environment
PythonWin – a Windows only interface to
Python
Python Shell – running 'python' from the
Command Line opens this interactive shell
For the exercises, we'll use IDLE, but you can
try them all and pick a favorite
IDLEhelps you
program in Python
by:
color-coding your
program code
debugging
auto-indent
interactive shell
Hello World
print “hello world”
Printshello world to
standard out
Open IDLE and try it
out yourself
Follow along using IDLE
Python is an object oriented language
Practically everything can be treated as an
object
“hello world” is a string
Strings, as objects, have methods that return
the result of a function on the string
Assign a string to a
variable
In this case “hw”
hw.title()
hw.upper()
hw.isdigit()
hw.islower()
The string held in your variable remains the
same
The method returns an altered string
Changing the variable requires reassignment
hw = hw.upper()
hw now equals “HELLO WORLD”
Lists (mutable sets of strings)
var = [] # create list
var = [‘one’, 2, ‘three’, ‘banana’]
Tuples (immutable sets)
var = (‘one’, 2, ‘three’, ‘banana’)
Dictionaries (associative arrays or ‘hashes’)
var = {} # create dictionary
var = {‘lat’: 40.20547, ‘lon’: -74.76322}
var[‘lat’] = 40.2054
Each has its own set of methods
Think of a list as a stack of cards, on which your
information is written
The information stays in the order you place it in
until you modify that order
Methods return a string or subset of the list or
modify the list to add or remove components
Written as var[index], index refers to order within
set (think card number, starting at 0)
You can step through lists as part of a loop
Adding to the List
var[n] = object
replaces n with object
var.append(object)
adds object to the end of the list
Removing from the List
var[n] = []
empties contents of card, but preserves order
var.remove(n)
removes card at n
var.pop(n)
removes n and returns its value
You will create lists:
Layers as inputs
Attributes to
match
Arrays of objects
You will work with
lists:
List of field names
List of selected
features
Like a list, tuples are iterable arrays of
objects
Tuples are immutable –
once created, unchangeable
To add or remove items, you must redeclare
Example uses of tuples
County Names
Land Use Codes
Ordered set of functions
Dictionariesare sets of key & value pairs
Allows you to identify values by a descriptive
name instead of order in a list
Keys are unordered unless explicitly sorted
Keys are unique:
var[‘item’] = “apple”
var[‘item’] = “banana”
print var[‘item’] prints just banana
Python uses whitespace and indents to
denote blocks of code
Lines of code that begin a block end in a
colon:
Lines within the code block are indented at
the same level
To end a code block, remove the indentation
You'll want blocks of code that run only when
certain conditions are met
if and else
if variable == condition:
#do something based on v == c
else:
#do something based on v != c
elif allows for additional branching
if condition:
elif another condition:
…
else: #none of the above
For allows you to loop over a block of
code a set number of times
For is great for manipulating lists:
a = ['cat', 'window', 'defenestrate']
for x in a:
print x, len(x)
Results:
cat 3
window 6
defenestrate 12
We could use a for loop to perform
geoprocessing tasks on each layer in a list
We could get a list of features in a feature
class and loop over each, checking attributes
Anything in a sequence or list can be used in
a For loop
Just be sure not to modify the list while
looping
Modules are additional pieces of code that
further extend Python’s functionality
A module typically has a specific function
additional math functions, databases, network…
Python comes with many useful modules
arcgisscripting is the module we will use to
load ArcGIS toolbox functions into Python
Modules are accessed using import
import sys, os # imports two modules
Modules can have subsets of functions
os.path is a subset within os
Modules
are then addressed by
modulename.function()
sys.argv # list of arguments
filename = os.path.splitext("points.txt")
filename[1] # equals ".txt"
Filesare manipulated by creating a file
object
f = open("points.txt", "r")
The file object then has new methods
print f.readline() # prints line from file
Files can be accessed to read or write
f = open("output.txt", "w")
f.write("Important Output!")
Files are iterable objects, like lists
Check for type assignment errors, items not
in a list, etc.
Try & Except
try:
a block of code that might have an error
except:
code to execute if an error occurs in "try"
Allowsfor graceful failure
– important in ArcGIS
Python Homepage
http://www.python.org/
Dive Into Python
http://www.diveintopython.org/
Learning Python, 3rd Edition
http://www.oreilly.com/catalog/9780596
513986/
Getting Started Writing Geoprocessing Scripts
Available on ESRI's support page