Functional Python

Small things can make you smile when you have the Aha! moment. It seems that these few days of 7li7w are starting to have real effects in the way I think when programming.

Today, I was faced to a simple but annoying problem. I had about 60 Formosat 2 acquisitions that I needed to use. These images have been pre-processed (thank Olivier!) and, because of historical reasons they are presented like this:

Sudouest_20060206_MS_fmsat_ortho_surf_8m.B1
Sudouest_20060206_MS_fmsat_ortho_surf_8m.B2
Sudouest_20060206_MS_fmsat_ortho_surf_8m.B3
Sudouest_20060206_MS_fmsat_ortho_surf_8m.B4
Sudouest_20060206_MS_fmsat_ortho_surf_8m.hdr

That is, a single ENVI header file and the 4 bands in one file each. And the same thing for every single acquisition date.

I wanted to have the list of all the acquisition dates (the 20060206 above). Since this was not a one shot operation, I wanted something a little bit more generic than opening the directory containing the images in an Emacs Dired buffer and copying and pasting the dates, so I have used Python.

The thing is solved in a single line of code:

dates = [fil.split('_')[1] for fil in os.listdir(imageDir) 
                            if(fil.split('.')[-1]=="hdr")]

I use a list comprehension, where for each file in the imageDir directory (os.listdir), if the extension is hdr I keep the second chunk of the name of the file when _ is used as a separator.