Is this group appropriate for that kind of thing? (If not sorry for posting this here.)
So I wanted to start learning Python, and there is soooo much information online, which is a little overwhelming. I really learn best from doing, especially if it's something actually useful. I needed to create a bunch of empty folders, so I figured it was a good exercise to start learning Python. Now that it's done, I am wondering what kind of things I could do better. Here is the code: # WELCOME TO MY FIRST PYTHON SCRIPT! # FIRST OF ALL, IT ***WORKS***!!! YAY! # I AM A VBA AND JAVASCRIPT PROGRAMMER, # SO IT IS PROBABLY NOT VERY "PYTHONIC", # SO PLEASE FEEL FREE TO TEAR THE SCRIPT A NEW ONE # AFTER YOU ARE SHOCKED BY THIS BAD CODE, # ALL I ASK IS THAT IF YOU THINK SOMETHING IS BAD, # PLEASE POST AN EXAMPLE OF THE "CORRECT" WAY OF DOING IT # COMING FROM VBA, I KNOW A LITTLE OOP, # BUT NOT C++ C# JAVA STUFF LIKE "INTERFACES" AND "ABSTRACT BASE CLASSES" # SO IF YOU GET INTO SUCH TERMINOLOGY MY EYES MIGHT START TO GLAZE OVER # UNLESS YOU CARE TO EXPLAIN THAT TOO ############################################################################################################################################################ # GLOBAL VALUES sForPythonVersion="3" #sFolderPathTemplate = "c:\\myscripts\\MP3 Disc <iCount/>" sFolderPathTemplate = "c:\\temp\\MP3 Disc <iCount/>" iFromCount = 1 iToCount = 250 iCountWidth = 3 ################################################################################################################################################################ # SUPPORT FUNCTIONS # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def is_string(myVar): # is_string IS MORE READABLE THAN isinstance (PLAIN ENGLISH!) #PYTHON 3 IS NOT LIKING THIS: return ( isinstance(myVar, str) or isinstance(myVar, unicode) ) #PYTHON 3 IS NOT LIKING THIS: return isinstance(myVar, basestr) return isinstance(myVar, str) # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// # THIS IS SOME SAMPLE FUNCTION FROM A BOOK I AM READING "PYTHON IN EASY STEPS" def strip_one_space(s): if s.endswith(" "): s = s[:-1] if s.startswith(" "): s = s[1:] return s # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def get_exact_python_version(): import sys sVersion = ".".join(map(str, sys.version_info[:3])) sVersion = sVersion.strip() return sVersion # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// # TO DO: RETURN TO THE LEFT OF FIRST "." def get_python_version(): sVersion = get_exact_python_version() return sVersion[0:1] # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// # CHECK PYTHON VERSION, IF IT'S WRONG THEN GRACEFULLY EXIT BEFORE IT BLOWS UP # (DAMN, PYTHON 2.x STILL COMPLAINS WITH SYNTAX ERRORS!!) # MAYBE THIS COULD STILL BE USEFUL FOR CHECKING THE SUB-VERSION, IN THAT CASE # TO DO: MORE GRANULAR CHECK, EG IF VERSION >= 3.5.0 def exit_if_wrong_python_version(sRightVersion): import os sCurrentVersion = get_python_version() if (sCurrentVersion != sRightVersion): print("" + "Wrong Python version (" + sCurrentVersion + "), this script should be run using Python " + sRightVersion + ".x. Exiting..." ) os._exit(0) # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def get_script_filename(): import os return os.path.basename(__file__) # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def get_timestamp(): import datetime return datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def create_folder(sPath): import os import errno #if not os.path.exists(directory): # os.makedirs(directory) try: os.makedirs(sPath, exist_ok=True) except OSError as exception: #if exception.errno != errno.EEXIST: print("ERROR #" + str(exception.errno) + "IN makedirs") raise # ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// def create_folders(sFolderPathTemplate:str="", iFromCount:int=1, iToCount:int=0, iCountWidth:int=0): # MAKE SURE TEMPLATE'S A STRING. OH, IS THIS NOT "PYTHONIC"? WELL IT'S MORE READABLE if is_string(sFolderPathTemplate) == False: iFromCount = 1; iToCount = 0; sName = "" sCount = "" iLoop = iFromCount while (iLoop <= iToCount) and (len(sFolderPathTemplate) > 0): sCount = "{0}".format(iLoop) if (iCountWidth > 0): sCount = sCount.zfill(iCountWidth) sName = sFolderPathTemplate.replace("<iCount/>", sCount) create_folder(sName) iLoop = iLoop + 1 ############################################################################################################################################################ # MAIN LOGIC def main(): # ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # MAKE SURE PYTHON VERSION IS CORRECT exit_if_wrong_python_version(sForPythonVersion) print("PYTHON VERSION (" + get_exact_python_version() + ") MATCHES REQUIRED VERSION (" + sForPythonVersion + ")") #print("get_python_version returns \"" + get_python_version() + "\"") #print("get_exact_python_version returns \"" + get_exact_python_version() + "\"") # ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # PRINT START TIMESTAMP print("" + get_timestamp() + " " + get_script_filename() + " STARTED.") # ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # DO WHAT WE CAME TO DO # IT'S PROBABLY BAD FORM TO REFERENCE GLOBAL VARIABLES INSIDE THE SCOPE OF A FUNCTION? # BUT I WANT TO MAKE IT EASY TO CONFIGURE THE SCRIPT JUST BY CHANGING A COUPLE OF LINES # AT THE TOP, WITHOUT HAVING TO SEARCH THROUGH THE CODE create_folders( sFolderPathTemplate, iFromCount, iToCount, iCountWidth) # ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # NOW FINISH print("" + get_timestamp() + " " + get_script_filename() + " FINISHED.") #import os #os._exit(0) ############################################################################################################################################################ main() -- https://mail.python.org/mailman/listinfo/python-list