Robin's Blog

Reminder about cross-platform case-sensitivity differences

This is just a very brief reminder about something you might run into when you’re trying to get your code to work on multiple platforms – in this case, OS X, Linux and Windows.

Basically: file names/paths are case-sensitive on Linux, but not on OS X or Windows.

Therefore, you could have some Python code like this:

f = open(os.path.join(base_path, 'LE72020252003106EDC00_B1.tif'))

which you might use to open part of a Landsat 7 image – and it would work absolutely fine on OS X and Windows, but fail on Linux. I initially assumed that the failure on Linux was due to some of the crazy path manipulation stuff that I had done to get base_path – but it wasn’t.

It was purely down to the fact that the file was actually called LE72020252003106EDC00_B1.TIF, and Linux treats LE72020252003106EDC00_B1.tif and LE72020252003106EDC00_B1.TIF as different files.

I’d always known that paths on Windows are not case-sensitive, and that they are case-sensitive on Linux – but I’d naively assumed that OS X paths were case-sensitive too, as OS X is based on a *nix backend, but I was wrong.

If you really have problems with this then you could fairly easily write a function that checked to see if a filename exists, and if it found that it didn’t then tried searching for files using something like a case-insensitive regular expression – but it’s probably just easiest to get the case of the filename right in the first place!


Categorised as: Computing, Linux, OSX, Programming, Python, Windows


2 Comments

  1. Chris Arndt says:

    Filenames are case-sensitive on OS X too, it’s just that on a standard OS X installation, the filesystem is set to be case-insensitive. But you can install OS X on a filesystem with case-sensitivity enabled too.

  2. Robin Wilson says:

    Ah thanks Chris – I didn’t know that (I guess I’d only ever seen standard OS X installations). I’ll update the post.

Leave a Reply

Your email address will not be published. Required fields are marked *