However, I am a member of the minority and so I often end up with folders and files whose names aspire to be sentences (or at least parts of speech like nouns, prepositions, pronouns and the occasional verb [To be DELETED: ugh!). Today was one of those days. I had a folder full of PDFs, each with a name of the form Last, First.pdf
. I would have preferred a name like FirstLast.pdf
. The easiest way to do this was with some shell-fu or Python-fu (with due apologies to the GIMP). I tossed a coin and chose Python. I fired up PythonWin and started working on fragments that would eventually unite into a single one-liner to rename them all (sorry JRR). I wasn't smart enough to reduce it all to one line (I needed the imports and I was not a lambda knight).
import fnmatch, os # basedir is a string representing the full path to the folder # containing the poor PDFs for pdf in fnmatch.filter(os.listdir(basedir), '*.pdf'): new_name = ".".join(["".join(reversed(pdf.split('.')[0].split(', '))), pdf.split('.')[1]]) os.rename(os.path.join(basedir, pdf), os.path.join(basedir, new_name))
Of cours,e I could have skipped using new_name
completely:
import fnmatch, os # basedir is a string representing the full path to the folder # containing the poor PDFs for pdf in fnmatch.filter(os.listdir(basedir), '*.pdf'): os.rename(os.path.join(basedir, pdf), os.path.join(basedir, ".".join(["".join(reversed(pdf.split('.')[0].split(', '))), pdf.split('.')[1]])))
I think this might be the first time I used reversed()
, but since it was a relatively recent addition (2.4 to be precise), I didn't feel too bad. Had I written this code before 2.4 had been released, I would have been forced to use reverse()
: this also reversed the list, but did it in place and did not return the list; I would be forced to reverse the list first and then send it onto the join
conveyor belt.
I also like how just adding brackets as bookends to items separated by commas, I get a list:
["".join(reversed(pdf.split('.')[0].split(', '))), pdf.split('.')[1]]
Mission accomplished. With some learning to boot. Not bad for a few minutes of work.