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)
The function 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
The getscds()
function just checks a filename for ".scd".