Python Introduction for Seismologists

Here we want to give a small, incomplete introduction to the Python programming language, with links to useful packages and further resources. The key features are explained via the following Python script:

 1#!/usr/bin/env python
 2import glob
 3from obspy.core import read
 5for file in glob.glob('*.z'):
 6    st = read(file)
 7    tr = st[0]
 8    msg = "%s %s %f %f" % (tr.stats.station, str(tr.stats.starttime),
 9                 ,
10    print(msg)

Description of each line of the example above:

Line 1

Shebang, specifying the location of the Python interpreter for Unix-like operating systems.

Lines 2-3

Import modules/libraries/packages in the current namespace. The glob module, which allows wildcard matching on filenames, is imported here. All functions inside this module can be accessed via glob.function() afterwards, such as glob.glob(). Furthermore, a single function read() from the obspy.core module is imported, which is used to read various different seismogram file formats.

Line 5

Starts a for-loop using the glob() function of the module glob on all files ending with '.z'.


The length of all loops in Python is determined by the indentation level. Do not mix spaces and tabs in your program code for indentation, this produces bugs that are not easy to identify.

Line 6

Uses the read() function from the obspy.core module to read in the seismogram to a Stream object named st.

Line 7

Assigns the first Trace object of the list-like Stream object to the variable tr.

Line 8-9

A Python counterpart for the well-known C function sprintf is the % operator acting on a format string. Here we print the header attributes station and starttime as well as the return value of the methods mean() and std() acting on the data sub-object of the Trace (which are of type numpy.ndarray).

Line 10

Prints content of variable msg to the screen.

As Python is an interpreter language, we recommend to use the IPython shell for rapid development and trying things out. It supports tab completion, history expansion and various other features. E.g. type help(glob.glob) or glob.glob? to see the help of the glob() function (the module must be imported beforehand).

Further Resources