diff --git a/assignment2/assignment2.py b/assignment2/assignment2.py new file mode 100644 index 0000000..95ec14d --- /dev/null +++ b/assignment2/assignment2.py @@ -0,0 +1,162 @@ +import csv +import traceback +import os +from datetime import datetime +import custom_module + +# ===== TASK 2: READ EMPLOYEES ===== +print("\n=== TASK 2: ===") +def read_employees(): + employees = {"fields": [], "rows": []} + try: + with open('../csv/employees.csv', 'r') as file: + reader = csv.reader(file) + employees["fields"] = next(reader) + employees["rows"] = [row for row in reader] + return employees + except Exception as e: + traceback.print_exc() + exit(1) + +employees = read_employees() +print(f"Employees Data: {employees}") + +# ===== TASK 3: COLUMN INDEX ===== +print("\n=== TASK 3: ===") +def column_index(column_name): + return employees["fields"].index(column_name) + +employee_id_column = column_index("employee_id") +print(f"Employee ID Column Index: {employee_id_column}") + +# ===== TASK 4: FIRST NAME ===== +print("\n=== TASK 4: ===") +def first_name(row_num): + return employees["rows"][row_num][column_index("first_name")] + +print(f"First name of employee 0: {first_name(0)}") + +# ===== TASK 5: FIND EMPLOYEE ===== +print("\n=== TASK 5: ===") +def employee_find(employee_id): + def employee_match(row): + return row[employee_id_column] == str(employee_id) + return list(filter(employee_match, employees["rows"])) + +employee_found = employee_find(1) +print(f"Employee found with ID 1: {employee_found}") + +# ===== TASK 6: FIND EMPLOYEE WITH LAMBDA ===== +print("\n=== TASK 6: ===") +def employee_find_2(employee_id): + return list(filter(lambda row: row[employee_id_column] == str(employee_id), employees["rows"])) + +employee_found_2 = employee_find_2(1) +print(f"Employee found with ID 1 (Lambda): {employee_found_2}") + +# ===== TASK 7: SORT BY LAST NAME ===== +print("\n=== TASK 7: ===") +def sort_by_last_name(): + last_name_col = column_index("last_name") + employees["rows"].sort(key=lambda row: row[last_name_col]) + return employees["rows"] + +sorted_by_last_name = sort_by_last_name() +print(f"Employees Sorted by Last Name: {sorted_by_last_name}") + +# ===== TASK 8: EMPLOYEE DICT ===== +print("\n=== TASK 8: ===") +def employee_dict(row): + return { + employees["fields"][i]: row[i] + for i in range(len(row)) + if employees["fields"][i] != "employee_id" + } + +employee_dict_result = employee_dict(employees["rows"][0]) +print(f"Employee Dict for First Employee: {employee_dict_result}") + +# ===== TASK 9: ALL EMPLOYEES DICT ===== +print("\n=== TASK 9: ===") +def all_employees_dict(): + return { + row[employee_id_column]: employee_dict(row) + for row in employees["rows"] + } + +all_employees = all_employees_dict() +print(f"All Employees as Dict: {all_employees}") + +# ===== TASK 10: OS MODULE ===== +print("\n=== TASK 10: ===") +def get_this_value(): + return os.getenv('THISVALUE', None) + +this_value = get_this_value() +print(f"Value of THISVALUE environment variable: {this_value}") + +# ===== TASK 11: CUSTOM MODULE ===== +print("\n=== TASK 11: ===") +def set_that_secret(new_secret): + custom_module.set_secret(new_secret) + +# (Assuming you need to set a secret; this would print confirmation if the module is used correctly) +set_that_secret("new_secret_123") +print("Secret set through custom_module.") + +# ===== TASK 12: READ MINUTES ===== +print("\n=== TASK 12: ===") +def read_minutes(): + def read_file(filename): + data = {"fields": [], "rows": []} + with open(filename, 'r') as file: + reader = csv.reader(file) + data["fields"] = next(reader) + data["rows"] = [tuple(row) for row in reader] + return data + + minutes1 = read_file('minutes.csv') + minutes2 = {"fields": minutes1["fields"], "rows": minutes1["rows"][:10]} # First 10 rows as sample + return minutes1, minutes2 + +minutes1, minutes2 = read_minutes() +print(f"Minutes Data (Full): {minutes1}") +print(f"Minutes Data (Sample, first 10 rows): {minutes2}") + +# ===== TASK 13: CREATE MINUTES SET ===== +print("\n=== TASK 13: ===") +def create_minutes_set(): + return set(minutes1["rows"]).union(set(minutes2["rows"])) + +minutes_set = create_minutes_set() +print(f"Minutes Set (Union of both): {minutes_set}") + +# ===== TASK 14: CONVERT TO DATETIME ===== +print("\n=== TASK 14: ===") +def create_minutes_list(): + return [ + (row[0], datetime.strptime(row[1], "%B %d, %Y")) + for row in minutes_set + ] + +minutes_list = create_minutes_list() +print(f"Minutes List with Dates: {minutes_list}") + +# ===== TASK 15: WRITE SORTED LIST ===== +print("\n=== TASK 15: ===") +def write_sorted_list(): + minutes_list.sort(key=lambda x: x[1]) + with open('minutes.csv', 'w', newline='') as file: + writer = csv.writer(file) + writer.writerow(["Name", "Date"]) + writer.writerows( + (name, date.strftime("%B %d, %Y")) + for name, date in minutes_list + ) + return [ + (name, date.strftime("%B %d, %Y")) + for name, date in minutes_list + ] + +sorted_minutes = write_sorted_list() +print(f"Sorted Minutes List: {sorted_minutes}") diff --git a/assignment2/csv/employees.csv b/assignment2/csv/employees.csv new file mode 100644 index 0000000..a5482f3 --- /dev/null +++ b/assignment2/csv/employees.csv @@ -0,0 +1,47 @@ +employee_id,first_name,last_name,department,position,salary +1,Jason,Tucker,Sales,Manager,50000 +2,Austin,Hester,Engineering,Developer,60000 +3,Daniel,Jackson,HR,Coordinator,45000 +4,Samantha,Johnson,Marketing,Assistant,40000 +5,Joseph,Harris,HR,Manager,55000 +6,Samantha,Johnson,Sales,Executive,47000 +7,Gina,Maldonado,Engineering,Developer,62000 +8,Samantha,Johnson,Marketing,Manager,52000 +9,Yesenia,Smith,Sales,Assistant,43000 +10,Lori,Martin,Engineering,Developer,60000 +11,Jonathan,Parrish,HR,Coordinator,47000 +12,Samantha,Johnson,Marketing,Assistant,40000 +13,Amanda,Brown,Sales,Manager,52000 +14,Sarah,Murray,HR,Assistant,43000 +15,Samantha,Johnson,Engineering,Developer,62000 +16,Austin,Hester,Marketing,Assistant,45000 +17,Jonathan,Parrish,Sales,Executive,55000 +18,Yesenia,Smith,Engineering,Manager,65000 +19,Daniel,Jackson,HR,Coordinator,46000 +20,Gina,Maldonado,Sales,Executive,50000 +21,Kimberly,Stewart,Engineering,Manager,65000 +22,Samantha,Johnson,Sales,Manager,53000 +23,Sarah,Murray,HR,Assistant,43000 +24,Aaron,Kaufman,Engineering,Developer,60000 +25,Tony,Henderson,Sales,Executive,48000 +26,Sarah,Murray,HR,Manager,54000 +27,Austin,Hester,Marketing,Coordinator,48000 +28,Joseph,Harris,HR,Executive,50000 +29,Gina,Maldonado,Sales,Manager,52000 +30,Aaron,Kaufman,Marketing,Manager,60000 +31,Daniel,Jackson,HR,Executive,48000 +32,Aaron,Kaufman,Sales,Manager,53000 +33,Aaron,Kaufman,HR,Manager,55000 +34,Tony,Henderson,Marketing,Coordinator,47000 +35,Yesenia,Smith,HR,Assistant,42000 +36,Joseph,Harris,Engineering,Coordinator,48000 +37,Jason,Tucker,Sales,Manager,49000 +38,Matthew,Russell,Marketing,Assistant,45000 +39,Lori,Martin,HR,Coordinator,46000 +40,Samantha,Johnson,Sales,Executive,51000 +41,Tony,Henderson,HR,Assistant,44000 +42,Gina,Maldonado,Sales,Manager,55000 +43,Sarah,Murray,HR,Coordinator,49000 +44,Gina,Maldonado,Sales,Executive,53000 +45,Austin,Hester,HR,Assistant,45000 +46,Samantha,Johnson,Sales,Executive,52000 diff --git a/assignment2/custom_module.py b/assignment2/custom_module.py new file mode 100644 index 0000000..8a6378b --- /dev/null +++ b/assignment2/custom_module.py @@ -0,0 +1,10 @@ +# Task 11 + #1. Create custom_module.py: +secret = "shazam!" # Initial value + +def set_secret(new_secret): + """Updates the secret variable globally.""" + global secret + secret = new_secret + + \ No newline at end of file diff --git a/assignment2/diary.py b/assignment2/diary.py new file mode 100644 index 0000000..3d85189 --- /dev/null +++ b/assignment2/diary.py @@ -0,0 +1,27 @@ +# Task 1: Diary +import traceback + +try: + with open('diary.txt', 'a') as file: + first_prompt = True + while True: + if first_prompt: + entry = input("What happened today? ") + first_prompt = False + else: + entry = input("What else? ") + + file.write(entry + "\n") + + if entry.lower() == "done for now": + break +except Exception as e: + trace_back = traceback.extract_tb(e.__traceback__) + stack_trace = list() + for trace in trace_back: + stack_trace.append(f'File : {trace[0]} , Line : {trace[1]}, Func.Name : {trace[2]}, Message : {trace[3]}') + 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..28c611d --- /dev/null +++ b/assignment2/diary.txt @@ -0,0 +1,25 @@ +went to gym +eat +grocery + +done for now +done for now + +wnet to gym +went to eat +grocery +done for now +done for now + +went yo gym +eat +done for now +done for now +done fornow + +went to GYM +eat +Grocery +done for now +done for now + diff --git a/assignment2/minutes.csv b/assignment2/minutes.csv index 0acabb7..84a339b 100644 --- a/assignment2/minutes.csv +++ b/assignment2/minutes.csv @@ -1,46 +1,46 @@ Name,Date Jason Tucker,"September 20, 1980" -Austin Hester,"March 8, 1981" -Daniel Jackson,"October 2, 1981" +Austin Hester,"March 08, 1981" +Daniel Jackson,"October 02, 1981" Mrs. Samantha Johnson,"December 17, 1981" -Joseph Harris,"March 3, 1982" +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 5, 1984" +Lori Martin,"February 05, 1984" Jonathan Parrish,"June 12, 1984" Mrs. Samantha Johnson,"July 20, 1984" -Amanda Brown,"August 8, 1984" +Amanda Brown,"August 08, 1984" Sarah Murray,"October 30, 1984" Mrs. Samantha Johnson,"November 28, 1984" -Austin Hester,"June 4, 1985" +Austin Hester,"June 04, 1985" Jonathan Parrish,"March 18, 1986" -Yesenia Smith,"May 6, 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 7, 1988" +Tony Henderson,"November 07, 1988" Sarah Murray,"November 19, 1988" Austin Hester,"January 18, 1989" -Joseph Harris,"March 1, 1989" -Gina Maldonado,"April 7, 1989" +Joseph Harris,"March 01, 1989" +Gina Maldonado,"April 07, 1989" Aaron Kaufman,"November 14, 1989" -Daniel Jackson,"April 8, 1990" -Aaron Kaufman,"May 1, 1990" +Daniel Jackson,"April 08, 1990" +Aaron Kaufman,"May 01, 1990" Aaron Kaufman,"July 21, 1990" -Tony Henderson,"October 4, 1990" +Tony Henderson,"October 04, 1990" Yesenia Smith,"November 23, 1990" -Joseph Harris,"April 3, 1991" +Joseph Harris,"April 03, 1991" Jason Tucker,"April 30, 1991" Matthew Russell,"May 31, 1991" -Lori Martin,"July 8, 1991" +Lori Martin,"July 08, 1991" Mrs. Samantha Johnson,"July 23, 1991" Tony Henderson,"November 15, 1991" -Gina Maldonado,"February 9, 1992" +Gina Maldonado,"February 09, 1992" Sarah Murray,"June 27, 1992" Gina Maldonado,"October 31, 1992" Austin Hester,"December 10, 1992" diff --git a/assignment2/sorted_minutes.csv b/assignment2/sorted_minutes.csv new file mode 100644 index 0000000..84a339b --- /dev/null +++ b/assignment2/sorted_minutes.csv @@ -0,0 +1,47 @@ +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"