# coding: latin-1 # Python 3.4.1 import os,random,time # få en lista av filer i mappen # ex: # classes/132A.txt # classes/132B.txt # classes/132C.txt # varje fil innehåller en lista med # klasskamrater med ett namn per rad def selectclass(folder): if not os.path.isdir(folder): print("The folder '%s' does not exist!" % folder) return None dirfiles = os.listdir(folder) files = {} # fyll dict med filnamn:klassnamn for index in range(len(dirfiles)): filename = dirfiles[index] basename = os.path.basename(filename) if os.path.isfile(os.path.join(folder,filename)) and basename[-4:] == '.txt': files[basename[:-4]] = basename if len(files) < 1: print("No valid files in '%s'" % folder) return None # Fråga om vilken klass print("Please select one of the following:") for key in files: print("- %s" % key) # gör dics'ens värden till lista och tar ett slumpmässigt värde randomfile = list(files.keys())[random.randrange(len(files))] print("For example, type '%s'\n(without the apostrophes)\nOr type 'cancel' to change folder" % randomfile) userinput = "" while True: userinput = input("> ") if userinput in files: break else: print("'%s' does not exist among the list!" % userinput) if userinput.lower() == "cancel": return None print("'%s' selected!" % userinput) return files[userinput],userinput def selectreadfolder(): print("Please enter the folder containing the class lists") userinput = "" while True: userinput = input("> ") if os.path.isdir(userinput): print("Folder '%s' selected!" % userinput) break else: print("'%s' is not a valid folder!" % userinput) return userinput def getclassmates(path): try: fileObj = open(path,"r") except FileNotFoundError: print("Unable to open file at '%s'!" % path) return None alldata = fileObj.read() return alldata.split("\n") def randomise(classmates): randomclass = classmates.copy() for index in range(len(classmates),0,-1): if randomclass[index-1] == '': del randomclass[index-1] random.shuffle(randomclass) return randomclass def selectwritefolder(): print("Please enter the folder where you wish to save the new text files") userinput = "" while True: userinput = input("> ") if os.path.isdir(userinput): return userinput try: os.mkdir(userinput) return userinput except FileExistsError: return userinput except FileNotFoundError: print("Unable to create folder at '%s', destination not found!" % userinput) def getfilename(folder,name,overflow,ext=".txt"): name = name + " (%s)" % ("000"[:-len(str(overflow))] + str(overflow)) return os.path.join(folder,name+ext) def save(classname,classlist,folder): # skapa namn på filen, använd datum i filens namn filename = "%s [%s]" % (classname,time.strftime("%A, %d %b %Y",time.localtime())) # hitta ett unikt namn overflow = 0 while os.path.exists(getfilename(folder,filename,overflow)): overflow += 1 fileObj = open(getfilename(folder,filename,overflow),"w") for index in range(len(classlist)): fileObj.write("%s: %s\n" % (index+1,classlist[index])) fileObj.close() print("Saved as '%s'" % getfilename(folder,filename,overflow)) #--------------# # MAIN PROGRAM # #--------------# readfolder = "" filename = "" classname = "" task = "all" while True: if task == 'selectclass' or task == 'all': #välj mapp och klassnamn while True: # om användaren misslyckas pga vadsomhelst att välja klass # så ska hen välja om mapp. readfolder = selectreadfolder() filename,classname = selectclass(readfolder) if type(filename) == str: break # path = path till filen, mapp och filnamn tillsammans path = os.path.join(readfolder,filename) if task == 'switchfolder' or task == 'all': # välj mapp att spara de slumpade klass-filerna writefolder = selectwritefolder() # randomisera klass classmates = getclassmates(path) randomclass = randomise(classmates) if task == "savenew" or task == "all": # spara i en mapp save(classname,randomclass,writefolder) print("To quit, type 'quit'.") print("To change class, type 'selectclass'.") print("To change location for randomised files, type 'switchfolder'") print("To create another randomised file just press enter.") userinput = input("> ").lower() if userinput == 'quit': break elif userinput == 'selectclass': task = userinput elif userinput == 'switchfolder': task = userinput elif userinput == '': task = 'savenew' else: print("Unknown command ('%s')!" % userinput) task = "N/A" print("Stopped.")