I am currently working on an Inventory System, and have just developed code that allows me to add items to my .csv
My current csv file looks like this:
Here is my relevant code:
class CsvReader: def __init__(self): self.result =  def make_dict_items(self): #fn = os.path.join('subdir', "Items2.csv") with open("Items2.csv") as fp: reader = csv.reader(fp) labels = next(reader, None) result =  for row in reader: row = int(row) row = float(row) row = int(row) pairs = zip(labels, row) self.result.append(dict(pairs)) def show_available(self): for item in self.result: print(item) def add_item(self): item_num = int(input("What is the items #?\n")) price = float(input("What is the items price?\n")) quant = int(input("What is the items quantity?\n")) name = input("What is the items name?\n") new_row = [item_num, price, quant, name] with open("Items2.csv", "a+") as fp: reader = csv.reader(fp) fp.seek(0) labels = next(reader, None) writer = csv.writer(fp) new_record = dict(zip(labels, new_row)) self.result.append(new_record) writer.writerow(new_record.values())
From what I understand, my add item is able to successfully input into my csv. For example, if I input 1, 2.99, 3, and Pumpkin into the inputs, and print(system.result), I can see the new dictionary in the list, and visually see it if I were to open the csv document.
What I dont understand is my current error I am getting. When I try to view my new item with my existing method that shows all items, I get an error:
row = int(row) IndexError: list index out of range
I understand this error has to do with trying to call elements in a list that don’t exist, but what seems to be the issue here. Why when I have the four items in my csv, the code works fine, but when I add a new row into the csv file, the code fails? Why does that specific line in make_dict_items not work when a 5th item is added, but works with the beginning four?
Your CSV has blank lines, which create empty
row. Check for this and skip it.
for row in reader: if row: row = int(row) row = float(row) row = int(row) pairs = zip(labels, row) self.result.append(dict(pairs))