Advertisement
jille_Jr

Slumpade sittplatser

Sep 11th, 2014
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.66 KB | None | 0 0
  1.  
  2. # coding: latin-1
  3. # Python 3.4.1
  4.  
  5. import os,random,time
  6.  
  7. # få en lista av filer i mappen
  8. # ex:
  9. # classes/132A.txt
  10. # classes/132B.txt
  11. # classes/132C.txt
  12.  
  13. # varje fil innehåller en lista med
  14. # klasskamrater med ett namn per rad
  15.  
  16. def selectclass(folder):
  17.  
  18.     if not os.path.isdir(folder):
  19.         print("The folder '%s' does not exist!" % folder)
  20.         return None
  21.  
  22.     dirfiles = os.listdir(folder)
  23.     files = {}
  24.  
  25.     # fyll dict med filnamn:klassnamn
  26.     for index in range(len(dirfiles)):
  27.         filename = dirfiles[index]
  28.         basename = os.path.basename(filename)
  29.         if os.path.isfile(os.path.join(folder,filename)) and basename[-4:] == '.txt':
  30.             files[basename[:-4]] = basename
  31.  
  32.     if len(files) < 1:
  33.         print("No valid files in '%s'" % folder)
  34.         return None
  35.  
  36.  
  37.     # Fråga om vilken klass
  38.     print("Please select one of the following:")
  39.  
  40.     for key in files:
  41.         print("- %s" % key)
  42.  
  43.     # gör dics'ens värden till lista och tar ett slumpmässigt värde
  44.     randomfile = list(files.keys())[random.randrange(len(files))]
  45.     print("For example, type '%s'\n(without the apostrophes)\nOr type 'cancel' to change folder" % randomfile)
  46.  
  47.     userinput = ""
  48.     while True:
  49.         userinput = input("> ")
  50.  
  51.         if userinput in files:
  52.             break
  53.         else:
  54.             print("'%s' does not exist among the list!" % userinput)
  55.  
  56.         if userinput.lower() == "cancel":
  57.             return None
  58.  
  59.     print("'%s' selected!" % userinput)
  60.     return files[userinput],userinput
  61.  
  62. def selectreadfolder():
  63.     print("Please enter the folder containing the class lists")
  64.  
  65.     userinput = ""
  66.     while True:
  67.         userinput = input("> ")
  68.  
  69.         if os.path.isdir(userinput):
  70.             print("Folder '%s' selected!" % userinput)
  71.             break
  72.         else:
  73.             print("'%s' is not a valid folder!" % userinput)
  74.  
  75.     return userinput
  76.  
  77. def getclassmates(path):
  78.     try:
  79.         fileObj = open(path,"r")
  80.     except FileNotFoundError:
  81.         print("Unable to open file at '%s'!" % path)
  82.         return None
  83.  
  84.     alldata = fileObj.read()
  85.     return alldata.split("\n")
  86.  
  87.  
  88. def randomise(classmates):
  89.     randomclass = classmates.copy()
  90.  
  91.     for index in range(len(classmates),0,-1):
  92.         if randomclass[index-1] == '':
  93.             del randomclass[index-1]
  94.  
  95.     random.shuffle(randomclass)
  96.  
  97.     return randomclass
  98.  
  99. def selectwritefolder():
  100.     print("Please enter the folder where you wish to save the new text files")
  101.  
  102.     userinput = ""
  103.     while True:
  104.         userinput = input("> ")
  105.  
  106.         if os.path.isdir(userinput):
  107.             return userinput
  108.  
  109.         try:
  110.             os.mkdir(userinput)
  111.             return userinput
  112.         except FileExistsError:
  113.             return userinput
  114.         except FileNotFoundError:
  115.             print("Unable to create folder at '%s', destination not found!" % userinput)
  116.  
  117. def getfilename(folder,name,overflow,ext=".txt"):
  118.     name = name + " (%s)" % ("000"[:-len(str(overflow))] + str(overflow))
  119.     return os.path.join(folder,name+ext)
  120.  
  121. def save(classname,classlist,folder):
  122.     # skapa namn på filen, använd datum i filens namn
  123.     filename = "%s [%s]" % (classname,time.strftime("%A, %d %b %Y",time.localtime()))
  124.  
  125.     # hitta ett unikt namn
  126.     overflow = 0
  127.     while os.path.exists(getfilename(folder,filename,overflow)):
  128.         overflow += 1
  129.  
  130.     fileObj = open(getfilename(folder,filename,overflow),"w")
  131.    
  132.     for index in range(len(classlist)):
  133.         fileObj.write("%s: %s\n" % (index+1,classlist[index]))
  134.  
  135.     fileObj.close()
  136.  
  137.     print("Saved as '%s'" % getfilename(folder,filename,overflow))
  138.  
  139. #--------------#
  140. # MAIN PROGRAM #
  141. #--------------#
  142.  
  143. readfolder = ""
  144. filename = ""
  145. classname = ""
  146.  
  147. task = "all"
  148. while True:
  149.     if task == 'selectclass' or task == 'all':
  150.         #välj mapp och klassnamn
  151.         while True:
  152.             # om användaren misslyckas pga vadsomhelst att välja klass
  153.             # så ska hen välja om mapp.
  154.             readfolder = selectreadfolder()
  155.             filename,classname = selectclass(readfolder)
  156.             if type(filename) == str:
  157.                 break
  158.  
  159.         # path = path till filen, mapp och filnamn tillsammans
  160.         path = os.path.join(readfolder,filename)
  161.  
  162.     if task == 'switchfolder' or task == 'all':
  163.         # välj mapp att spara de slumpade klass-filerna
  164.         writefolder = selectwritefolder()
  165.  
  166.     # randomisera klass
  167.     classmates = getclassmates(path)
  168.     randomclass = randomise(classmates)
  169.  
  170.     if task == "savenew" or task == "all":
  171.         # spara i en mapp
  172.         save(classname,randomclass,writefolder)
  173.  
  174.     print("To quit, type 'quit'.")
  175.     print("To change class, type 'selectclass'.")
  176.     print("To change location for randomised files, type 'switchfolder'")
  177.     print("To create another randomised file just press enter.")
  178.  
  179.     userinput = input("> ").lower()
  180.  
  181.     if userinput == 'quit':
  182.         break
  183.     elif userinput == 'selectclass':
  184.         task = userinput
  185.     elif userinput == 'switchfolder':
  186.         task = userinput
  187.     elif userinput == '':
  188.         task = 'savenew'
  189.     else:
  190.         print("Unknown command ('%s')!" % userinput)
  191.         task = "N/A"
  192.  
  193. print("Stopped.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement