For anyone else out there finding this, if you take the code and modify it or put it somewhere else public, let me know. If I do such a thing, I too will let you know.
First off, all I wanted was a way to find images for Throwback Thursday and I have a very messy folder called Pictures and in there my photos go back to 2003, November.
Some are older, but their modification/creation dates on my computer will not reflect their true date/time so this tool will be useless for those. Unless I modify it later, for example, I can think of an improvement. . . if date modified content does not match date in name of file (parse the name of the file) then use the name as the date.
[update] I am not sure how to make this better. It is definitely not 100% accurate. For example, today, some of the 10 images I've pulled up were created on 9/6/2012 (Thursday) BUT they were created for a web-site by a script I used in the past. By pure coincidence, it also happens to be originally taken on Thursday, July 19, 2012... so, here it is :).
Angel Island, Thursday, July 19, 2012 |
The code is currently below. I also put it on Siafoo.
================================= usage:
Mac OS X Terminal with python3 and python installed. This python3 is 3.4.
Show in Mac Preview app 10 files of png or jpg found in /foo/bar directory:
python3 tbt.py /foo/bar/ -n 10 -m
List all files in /foo/bar directory:
python3 tbt.py -l /foo/bar
List all options with -h:
unknown68a86d404130:play michaelcase$ python3 tbt.py -h usage: tbt.py [-h] [-d D] [-l] [-m] [-mw] [-n N] directory Program for "Throwback Thursdays" allows users to specify day of week to find, defaults to Thursday, and provides a list of files of jpg and png within the directory you specify that occurred on that day of week. However, precedence goes mw, m then l. In other words, ONLY ONE of those flags will be supported, if you specify more than one, the precedence is enforced. positional arguments: directory Required. Directory from which to read files. optional arguments: -h, --help show this help message and exit -d D Optional. Day of week. Defaults to Thursday. Can not do multiple days. -l Optional. Reply with list of files that can be passed to something like xargs. -m Optional. Mac OS open Preview App with resulting list of files. If the list of files gets too long, the command may fail. -mw Optional. Mac OS open Preview App with one image per window. Can be torture to your screen, be careful. -n N Optional. Number of files to *randomly* retreive from list. (Revision 1.0 of 2015-12-14 14:15:28)
================================= code, cut here to end. put in file tyt.py
# use os.path.getctime to get creation date/time. # use date.weekday() to get 0 = Monday to 6 = Sunday. # then use present Thursdays as tbt files :) # ctime - the last time the file's inode was changed (e.g. permissions changed, file renamed, etc..) # mtime - last time the file's CONTENTS were changed # atime - last time the file was accessed. # author: Michael E. Case, mec at dcn dot davis dot ca dot us
import sys import os from datetime import * import time from sys import argv #from subprocess import Popen import argparse import random # 2015-12-14: # Given a path, search through it and all it's subdirectories for "throwback thursday" files. # info to identify program and current revision, and some globals. global pgm, rev, date pgm = (sys.argv[0]).replace('./','') rev = '$Revision: 1.0 $'.replace('$','')[9:].strip() date = '$Date: 2015-12-14 14:15:28 $'.replace('$','')[5:].strip() def isint( s ): try: int(s) except ValueError: return False else: return True def tbt_main(): #read command arguments global pgm, rev, date ap = argparse.ArgumentParser(prog=pgm, epilog="(Revision "+rev+" of "+date+")", description="""Program for \"Throwback Thursdays\" allows users to specify day of week to find, defaults to Thursday, and provides a list of files of jpg and png within the directory you specify that occurred on that day of week. However, precedence goes mw, m then l. In other words, ONLY ONE of those flags will be supported, if you specify more than one, the precedence is enforced.""") ap.add_argument("directory", help="Required. Directory from which to read files.") ap.add_argument("-d", help="Optional. Day of week. Defaults to Thursday. Can not do multiple days.", default="3") ap.add_argument("-l", help="Optional. Reply with list of files that can be passed to something like xargs.", action="store_true", default=False) ap.add_argument("-m", help="Optional. Mac OS open Preview App with resulting list of files. If the list of files gets too long, the command may fail.", action="store_true", default=False) ap.add_argument("-mw", help="Optional. Mac OS open Preview App with one image per window. Can be torture to your screen, be careful.", action="store_true", default=False) ap.add_argument("-n", help="Optional. Number of files to *randomly* retreive from list.", default=-1, type=int) newargs = ap.parse_args() #print(newargs) #if () listfiles = newargs.l indir = newargs.directory nf = newargs.n macprev = newargs.m macprevwin = newargs.mw dow = 3 if isint(newargs.d) == False: lcd = newargs.d.lower() if "monday" in lcd: dow = 0 elif "tuesday" in lcd: dow = 1 elif "wednesday" in lcd: dow = 2 elif "thursday" in lcd: dow = 3 elif "friday" in lcd: dow = 4 elif "saturday" in lcd: dow = 5 elif "sunday" in lcd: dow = 6 else: print(newargs.d+" not found in day of week. Day of week will default to Thursday (3).") dow = 3 else: if dow > 6: print(newargs.d+" is greater than 6. Day of week will default to Thursday (3).") dow = 3 if macprev == True and macprevwin == True and listfiles == True: macprev = False listfiles = False print("Found -mw, -w and -l, precedence dictates using mw.") if macprev == True and listfiles == True: listfiles = False print("Found -w and -l, precedence ditates using -m.") if macprevwin == True and listfiles == True: listfiles = False print("Found -mw and -l, precedence dictates using -mw.") # print(macprev, str(nf), indir, listfiles) # print(indir) fs = "" fsofar = 0 randomfs = False if nf != -1: randomfs = True nfilestot = 0 # probtofind = 0 rindstosave = [] # can't figure out how to do this using "probability of this picture being one of the n you requested." # or rather, that solution did not always give me n. So the new solution is come up with n integers between # one and nfilestot. Those will be the ones we get. No repeats, of course. if randomfs == True: for root, dirs, files in os.walk(indir, topdown=True): #print("in first for") for name in files: tm = os.path.getmtime(os.path.join(root,name)) dt = datetime.fromtimestamp(tm) if dt.weekday() == dow: if len(name.split(".")) > 1: spl = name.split(".") last = spl[len(spl)-1] if last.lower() == "jpg" or last.lower() == "png": nfilestot +=1 #print("total number of all jpg and png = "+str(nfilestot)) if nfilestot > 0: nsel = 0 while nsel < nf and nf > 0: rn = random.randint(1, nfilestot) # [1, nfilestot] if rn not in rindstosave: rindstosave.append(rn) nsel += 1 # print ("nsel = "+str(nsel)) # print (rindstosave) rindstosave.sort() # print (rindstosave) # probtofind = nf / nfilestot fc = 0 for root, dirs, files in os.walk(indir, topdown=True): #print("in first for") for name in files: #print("in second for") tm = os.path.getmtime(os.path.join(root,name)) dt = datetime.fromtimestamp(tm) if dt.weekday() == dow: if len(name.split(".")) > 1: spl = name.split(".") last = spl[len(spl)-1] if last.lower() == "jpg" or last.lower() == "png": fc += 1 #print("found jpg") #os.system #Popen if macprev == True: #print (fs) if randomfs == False: fs += "\""+os.path.join(root,name)+"\" " else: if fc in rindstosave: fs += "\""+os.path.join(root,name)+"\" " rindstosave = rindstosave[1:] if macprevwin == True: if randomfs == False: os.system("open -a /Applications/Preview.app "+"\""+os.path.join(root,name)+"\"") else: if fc in rindstosave: os.system("open -a /Applications/Preview.app "+"\""+os.path.join(root,name)+"\"") rindstosave = rindstosave[1:] if listfiles == True: if randomfs == False: print("\""+os.path.join(root,name)+"\"") else: if fc in rindstosave: print("\""+os.path.join(root,name)+"\"") rindstosave = rindstosave[1:] # # print(os.path.join(root,name)) # call("open -f -a /Applications/Preview.app", os.path.join(root,name)) if macprev == True: #print ("open -a /Applications/Preview.app "+fs) os.system("open -a /Applications/Preview.app "+fs) if __name__ == "__main__": tbt_main()
No comments:
Post a Comment