A little disclaimer: you're going to have a field day with this. It's horrible. Looking at it makes me want to vomit, and don't ask me to explain it, because I've long forgotten what I was thinking when I wrote it. That being said, I can't really find a way to shorten it of make it make sense. Perhaps someone could help me out?
A bit of a background:
This program is meant to install mods for a game called Supreme Commander 2. It is meant to install ANY mod. The following is true of all the mods:
- The only archive type is the
.scd. SCD's have the same encoding as
.zip's, but with a 0% compression rate.
The way to install the mod is simple: There will always be at least one scd inside the first, and there may be more scd's inside that one. Any scd with folders inside it should be moved to
C:\Program Files (x86)\Steam\steamapps\common\supreme commander 2\gamedata
There may be more than one scd to be moved per mod.
And that's it. This is something of a "programming challenge," but I am really looking for improvements upon the following code:
import os, zipfile def installfromdownload(filename): global scdlist targetfolder = r"C:\Program Files (x86)\Mod Manager\Mods\f_" + filename[:-4] lentf = len(targetfolder) unzip(r"C:\Program Files (x86)\Mod Manager\Mods\z_" + filename + ".scd", targetfolder) if checkdirs(targetfolder) == False: os.system("copy C:\Program Files (x86)\Mod Manager\Mods\z_" + filename + ".scd" " C:\Program Files (x86)\Steam\steamapps\common\supreme commander 2\gamedata") else: newfolderonelist =  getscds(targetfolder) for file in scdlist: newfolderone = targetfolder + "\f_" + file[:-4] filepath = targetfolder + "\\" + file unzip(filepath, newfolderone) newfolderonelist.append(newfolderone) for newfolders in newfolderonelist: if os.checkdirs(newfolders) == False: newfolders = newfolders[lentf + 1:] for scds in scdlist: if newfolder in scds == True: scdpath = targetfolder + "\\" + scds os.system("copy " + scdpath + " C:\Program Files (x86)\Steam\steamapps\common\supreme commander 2\gamedata")
Note that there is no error handling here, that is done when I call the function. The function
unzip() is here:
def unzip(file, target): modscd = zipfile.ZipFile(file) makepath(target) modscd.extractall(target)
checkdirs() is here (note this is pretty bad, it only checks for periods in the file name, so please submit suggestions):
def checkdirs(target): isfile = 0 targetlist = os.listdir(target) for files in targetlist: for letters in files: if letters == ".": isfile = isfile + 1 if isfile == len(os.listdir(target)): return False else: return True
getscds() function just checks a filename for ".scd".