My first major Python script!
I created a script that took the list of applications from a standard build then compares to a CSV file from a users current machine, subtracts them and what’s left is the additional apps to add at build time.
It uses `csv.Sniffer` to work out what the delimiter is so it can detect if its ‘,’ or ‘;’ or tabs, etc. [Line 13 is where the heavy lifting is]
Here’s the script:
#!/usr/local/bin/python3 # Imports import csv, os, pathlib, glob from pprint import pprint def read_csv_delimit(csv_file): # Initialise list file_csv = [] # Open csv & check delimiter with open(csv_file, newline='', encoding = "ISO-8859-1") as csvfile: dialect = csv.Sniffer().sniff(csvfile.read(1096)) csvfile.seek(0) reader = csv.reader(csvfile, dialect) for item in reader: file_csv.append(item[0]) #del file_csv[0] return file_csv def write_csv(file_dir, csv_file, new_machine_list): # Open file then write the lines if os.path.exists(file_dir + "/" + csv_file): append_write = 'a' else: append_write = 'w' file_name = csv_file with open(file_dir + "/" + csv_file, "w") as csv_file: writer = csv.writer(csv_file, delimiter=',') writer.writerow([file_name]) for line in new_machine_list: writer.writerow([line]) def split_path(full_path): #path = path.rstrip(os.sep) head, tail = os.path.split(full_path) return (head, tail) def enumMachines(machine_dir): machines = [] for filename in glob.glob(machine_dir + "/*.csv"): machines.append(filename) return machines def main(): # Get the paths to the csv files app_csv = input("drop the app list csv here: ") machine_dir = input("drop the machines csv folder here: ") # Gets list of machines with extension of .csv machines = enumMachines(machine_dir) # get csv data app_list = read_csv_delimit(app_csv) for machine in machines: # import machine csv data machine_list = read_csv_delimit(machine) # delete the first row del machine_list[0] # list comprehension new_machine_list = [app for app in machine_list if app not in app_list] # get the machine csv name new_machine_dir, new_machine_csv = split_path(machine) # new folder to write to new_machine_dir = machine_dir + "/" + "edited" # create the new folder if it doesnt exist pathlib.Path(new_machine_dir).mkdir(parents=True, exist_ok=True) # Write the machine name first #write_csv(new_machine_dir, new_machine_csv, new_machine_csv) # write to the new csv write_csv(new_machine_dir, new_machine_csv, new_machine_list) if __name__ == '__main__': main()