jille_Jr icon

Slumpade sittplatser

jille_Jr | PRO | 09/11/14 06:54:01 AM UTC | 0 ⭐ | 569 👁️ | Never ⏰ | []
Python |

4.66 KB

|

None

|

0 👍

/

0 👎

 
# 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