diff --git a/assignment2/assignment2.py b/assignment2/assignment2.py new file mode 100644 index 0000000..193f76e --- /dev/null +++ b/assignment2/assignment2.py @@ -0,0 +1,203 @@ +# Task 2: Read a CSV File + +from asyncio import Task +import csv +import traceback +import os +import custom_module +from datetime import datetime + +def read_employees(): + employee_dict = {} + rows = [] + + try: + with open("../csv/employees.csv", "r") as file: + reader = csv.reader(file) # reader lets me loop through each row of the CSV file + + for index, row in enumerate(reader): + if index == 0: + employee_dict["fields"] = row + else: + rows.append(row) + + employee_dict["rows"] = rows + + return employee_dict + + except Exception as e: + trace_back = traceback.extract_tb(e.__traceback__) + stack_trace = [] + + for trace in trace_back: + stack_trace.append( + f"File : {trace[0]} , Line : {trace[1]}, Func.Name : {trace[2]}, Message : {trace[3]}" + ) + print("An exception occurred.") + print(f"Exception type: {type(e).__name__}") + + message = str(e) + if message: + print(f"Exception message: {message}") + + print(f"Stack trace: {stack_trace}") + + raise + +employees = read_employees() +print(employees) + +# Task 3: Find the Column Index + +employees = read_employees() +print(employees) + +def column_index(column_name): + return employees["fields"].index(column_name) + +employee_id_column = column_index("employee_id") + +# Task 4: Find the Employee First Name + +def first_name(row_number): + first_name_column = column_index("first_name") + return employees["rows"][row_number][first_name_column] + +# Task 5: Find the Employee: a Function in a Function + +def employee_find(employee_id): + + def employee_match(row): + return int(row[employee_id_column]) == employee_id + matches = list(filter(employee_match, employees["rows"])) + return matches + +# Task 6: Find the Employee with a Lambda + +def employee_find_2(employee_id): + matches = list( + filter( + lambda row: int(row[employee_id_column]) == employee_id, + employees["rows"] + ) + ) + return matches + +# Task 7: Sort by Last Name + +def sort_by_last_name(): + last_name_column = column_index("last_name") + employees["rows"].sort(key=lambda row: row[last_name_column]) + return employees["rows"] + +sort_by_last_name() +print(employees) + +# Task 8: Create a dict for an Employee + +def employee_dict(row): + employee = {} + + for index, field in enumerate(employees["fields"]): + if field != "employee_id": + employee[field] = row[index] + return employee + +# Task 9: A dict of dicts, for All Employees + +def all_employees_dict(): + all_employees = {} + + for row in employees["rows"]: + employee_id = row[employee_id_column] + all_employees[employee_id] = employee_dict(row) + + return all_employees + +# Task 10: + +def get_this_value(): + return os.getenv("THISVALUE") + +def set_that_secret(new_secret): + custom_module.set_secret(new_secret) + +# Task 12: + +def read_csv_file(filename): + data = {} + rows = [] + + with open(filename, "r") as file: + reader = csv.reader(file) + + for index, row in enumerate(reader): + if index == 0: + data["fields"] = row + else: + rows.append(tuple(row)) + + data["rows"] = rows + return data + +def read_minutes(): + minutes1 = read_csv_file("../csv/minutes1.csv") + minutes2 = read_csv_file("../csv/minutes2.csv") + return minutes1, minutes2 + + +minutes1, minutes2 = read_minutes() + +print(minutes1) +print(minutes2) + +# Task 13: + +def create_minutes_set(): + set1 = set(minutes1["rows"]) + set2 = set(minutes2["rows"]) + + return set1.union(set2) + +minutes_set = create_minutes_set() + +# Task 14: + +def create_minutes_list(): + minutes_list = list(minutes_set) + + minutes_list = list( + map( + lambda x: (x[0], datetime.strptime(x[1], "%B %d, %Y")), + minutes_list, + ) + ) + + return minutes_list + +minutes_list = create_minutes_list() +print(minutes_list) + +# Task 15: + +def write_sorted_list(): + minutes_list.sort(key=lambda x: x[1]) + + converted_list = list( + map( + lambda x: (x[0], datetime.strftime(x[1], "%B %d, %Y")), + minutes_list, + ) + ) + + with open("./minutes.csv", "w", newline="") as file: + writer = csv.writer(file) + + writer.writerow(minutes1["fields"]) + writer.writerows(converted_list) + + return converted_list + +write_sorted_list() + + diff --git a/assignment2/custom_module.py b/assignment2/custom_module.py new file mode 100644 index 0000000..250eee2 --- /dev/null +++ b/assignment2/custom_module.py @@ -0,0 +1,7 @@ +# Task 11: + +secret = "shazam" + +def set_secret(new_secret): + global secret + secret = new_secret diff --git a/assignment2/diary.py b/assignment2/diary.py new file mode 100644 index 0000000..d6225ff --- /dev/null +++ b/assignment2/diary.py @@ -0,0 +1,29 @@ +# Task 1: Diary + +import traceback +try: + with open("diary.txt", "a") as file: + entry = input("What happened today?") + + while entry != "done for now": + file.write(entry + "\n") + entry = input("What else?") + + file.write(entry + "\n") + +except Exception as e: + trace_back = traceback.extract_tb(e.__traceback__) + stack_trace = [] + + for trace in trace_back: + stack_trace.append( + f"File : {trace[0]} , Line : {trace[1]}, Func.Name : {trace[2]}, Message : {trace[3]}" + ) + print("An exception occurred.") + print(f"Exception type: {type(e).__name__}") + + message = str(e) + if message: + print(f"Exception message: {message}") + + print(f"Stack trace: {stack_trace}") \ No newline at end of file diff --git a/assignment2/diary.txt b/assignment2/diary.txt new file mode 100644 index 0000000..17b565a --- /dev/null +++ b/assignment2/diary.txt @@ -0,0 +1,8 @@ +Learned python file handling +Worked on assignment 2 +done for now +I took a small nap +I also went to some garage sales and antigue shops +Now I'm working on this and ripping my hair out +Done for now +done for now diff --git a/assignment2/minutes.csv b/assignment2/minutes.csv index 0acabb7..429f023 100644 --- a/assignment2/minutes.csv +++ b/assignment2/minutes.csv @@ -1,47 +1,47 @@ -Name,Date -Jason Tucker,"September 20, 1980" -Austin Hester,"March 8, 1981" -Daniel Jackson,"October 2, 1981" -Mrs. Samantha Johnson,"December 17, 1981" -Joseph Harris,"March 3, 1982" -Mrs. Samantha Johnson,"March 12, 1982" -Gina Maldonado,"December 16, 1982" -Mrs. Samantha Johnson,"December 23, 1982" -Yesenia Smith,"August 10, 1983" -Lori Martin,"February 5, 1984" -Jonathan Parrish,"June 12, 1984" -Mrs. Samantha Johnson,"July 20, 1984" -Amanda Brown,"August 8, 1984" -Sarah Murray,"October 30, 1984" -Mrs. Samantha Johnson,"November 28, 1984" -Austin Hester,"June 4, 1985" -Jonathan Parrish,"March 18, 1986" -Yesenia Smith,"May 6, 1986" -Daniel Jackson,"December 13, 1986" -Gina Maldonado,"February 13, 1987" -Kimberly Stewart,"December 12, 1987" -Mrs. Samantha Johnson,"July 10, 1988" -Sarah Murray,"August 16, 1988" -Aaron Kaufman,"October 24, 1988" -Tony Henderson,"November 7, 1988" -Sarah Murray,"November 19, 1988" -Austin Hester,"January 18, 1989" -Joseph Harris,"March 1, 1989" -Gina Maldonado,"April 7, 1989" -Aaron Kaufman,"November 14, 1989" -Daniel Jackson,"April 8, 1990" -Aaron Kaufman,"May 1, 1990" -Aaron Kaufman,"July 21, 1990" -Tony Henderson,"October 4, 1990" -Yesenia Smith,"November 23, 1990" -Joseph Harris,"April 3, 1991" -Jason Tucker,"April 30, 1991" -Matthew Russell,"May 31, 1991" -Lori Martin,"July 8, 1991" -Mrs. Samantha Johnson,"July 23, 1991" -Tony Henderson,"November 15, 1991" -Gina Maldonado,"February 9, 1992" -Sarah Murray,"June 27, 1992" -Gina Maldonado,"October 31, 1992" -Austin Hester,"December 10, 1992" -Mrs. Samantha Johnson,"December 12, 1992" +Name,Date +Jason Tucker,"September 20, 1980" +Austin Hester,"March 08, 1981" +Daniel Jackson,"October 02, 1981" +Mrs. Samantha Johnson,"December 17, 1981" +Joseph Harris,"March 03, 1982" +Mrs. Samantha Johnson,"March 12, 1982" +Gina Maldonado,"December 16, 1982" +Mrs. Samantha Johnson,"December 23, 1982" +Yesenia Smith,"August 10, 1983" +Lori Martin,"February 05, 1984" +Jonathan Parrish,"June 12, 1984" +Mrs. Samantha Johnson,"July 20, 1984" +Amanda Brown,"August 08, 1984" +Sarah Murray,"October 30, 1984" +Mrs. Samantha Johnson,"November 28, 1984" +Austin Hester,"June 04, 1985" +Jonathan Parrish,"March 18, 1986" +Yesenia Smith,"May 06, 1986" +Daniel Jackson,"December 13, 1986" +Gina Maldonado,"February 13, 1987" +Kimberly Stewart,"December 12, 1987" +Mrs. Samantha Johnson,"July 10, 1988" +Sarah Murray,"August 16, 1988" +Aaron Kaufman,"October 24, 1988" +Tony Henderson,"November 07, 1988" +Sarah Murray,"November 19, 1988" +Austin Hester,"January 18, 1989" +Joseph Harris,"March 01, 1989" +Gina Maldonado,"April 07, 1989" +Aaron Kaufman,"November 14, 1989" +Daniel Jackson,"April 08, 1990" +Aaron Kaufman,"May 01, 1990" +Aaron Kaufman,"July 21, 1990" +Tony Henderson,"October 04, 1990" +Yesenia Smith,"November 23, 1990" +Joseph Harris,"April 03, 1991" +Jason Tucker,"April 30, 1991" +Matthew Russell,"May 31, 1991" +Lori Martin,"July 08, 1991" +Mrs. Samantha Johnson,"July 23, 1991" +Tony Henderson,"November 15, 1991" +Gina Maldonado,"February 09, 1992" +Sarah Murray,"June 27, 1992" +Gina Maldonado,"October 31, 1992" +Austin Hester,"December 10, 1992" +Mrs. Samantha Johnson,"December 12, 1992"