Today I needed to move 435 TIFF images from the San Marcos Daily Record Negative Collection into folders based on a section of their filename.
The filenames include the following sections: SMDR_1959-185_001.tif
- SMDR, the collection code for the items digitized
- 1959, the year the negatives are from
- 185, the physical folder the negatives are from
- 001, the index number for the image
- tif, the file’s extension
If there is more than 1 negative in folder 185, then the 2nd image will get index number 002, i.e. SMDR_1959-185_002.tif.
We organize the images in digital folders to match the physical folders, so every image in the SMDR collection from 1959 in physical folder 185 needs to be in a digital folder 185. The folder therefore only needs sections 1-3 of the filename, i.e. SMDR_1959-185.
I have the images and I know what my digital folder names need to be, but if I did all of this work by hand it would not only take a significant amount of time, I would probably make a few mistakes. This type of repetitive work is better handled by the computer because it will not only create the folders and move the files more quickly, it is much less likely to make mistakes (assuming I provide the proper instructions).
This was very quickly done in Python 3.6 on Windows 10 using less than 20 lines of code:
import os import shutil dir = "1959_6x6/" for file in os.listdir(dir): # get all but the last 8 characters to remove # the index number and extension dir_name = file[-8] print(f'dir_name: {dir_name}') dir_path = dir + dir_name print(f'dir_path: {dir_path}') # check if directory exists or not yet if not os.path.exists(dir_path): os.makedirs(dir_path) if os.path.exists(dir_path): file_path = dir + file print(f'file_path: {file_path}') # move files into created directory shutil.move(file_path, dir_path)
This code doesn’t use best practices as I should be creating the directory path differently, but hey, it worked and I was able to create the directories, move the files, and write this blog post in significantly less time than it would have taken to do it manually.
Jeremy Moore
jeremy.moore@txstate.edu