# 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.")
Comments