'Change the value of a text file Python

I am doing a POS machine which save the data in a text file. After customer buy item, the total quantity of the item in the text file will minus the quantity of the customer brought, but after I trying the code can works but the stock quantity in the text file remain unchanged. So, I found some answer from this SO question Reducing quantity in text file , it works for them but mine can't. What gone I to do for my code work.

This is the contein of my text file named razershop.txt(id, name, price, quantity):

1 , Razer Deathadder V2, 349.00 , 100
2 , Razer Viper Ultimate, 419.00 , 105
3 , Razer Basilink Ulti, 599.00 , 35
4 , Razer Viper Mini, 139.00 , 295
5 , Raazer Deathadder X, 76.90 , 592

I used all_products to open my file:

all_products = [line.strip().split(',') for line in open('razershop.txt','r').readlines()]

This is the decrement item function code:

def decrement_item(item_id, quantity):
with open('razershop.txt', 'r') as fin:
    # indexes for id and quantity
    index_id = 0
    index_quantity = 3
    
    # output buffer
    output = []
    
    # Add headaer to output buffer
    header = fin.readline().rstrip()
    output.append(header)  # header without '\n' at end of line
    
    bfound_item = False
    for line in fin:
        # Check each line for item_id then upadte quantity
        line = line.rstrip()
        if not bfound_item:
            # Only process if item_id has not been found yet
            # Break line into separate fields
            row = line.split()
            current_id = row[index_id]
            if current_id == item_id:
                # Found item
                # Check if sufficiente quantity
                current_quantity = int(row[index_quantity])
                if current_quantity >= quantity:
                    # Decrement quantity
                    current_quantity -= quantity
                    row[index_quantity] = str(current_quantity)
                    line = ' '.join(row)
                    bfound_item = True
                else:
                    # Insufficient quantity for update
                    s = f"Sorry, available quantity is only {int(row[index_quantity])}"
                    raise Exception(s)
                
        # Add line to output
        output.append(line)  # add copy since row changes with loop
        
# Update inventory file
with open('razershop.txt', 'w') as fout:
    for line in output:
        fout.write(line + '\n')

This is my Pos machine code which generate bill and will decrease the stock after customer buy it:

while(True):
banner()
choice = int(input("Please enter your option: "))
if choice == 1:
    display_all()
elif choice == 2:
    display_all()
    print("Press 0 for payment")
    item_lst = []
    price_lst = []
    quantity_lst = []
    total_price = 0
    prod_id = 999
    while prod_id != 0:
        prod_id = int(input("Enter the Product ID: "))
        for item in all_products:
            if int(item[0]) == prod_id:
                quantity = int(input("Please enter the quantity: "))
                item_lst.append(item[1])
                quantity_lst.append(quantity)
                price_q = float(item[2]) * quantity
                price_lst.append(price_q)
                total_price = total_price + price_q
                decrement_item(prod_id , quantity)

    order_summary(item_lst , price_lst , total_price , quantity_lst)
    print(" ")
    conf = input("Please confirm your order(Y/N): ")
    if conf == "Y":
        member = input("Do you have membership(Y/N): ")
        if member == "Y":
            total_price = total_price * 0.9
            payment = float(input("Amount received: "))
            change = payment - total_price
            generate_bill(item, total_price, item_lst , price_lst , quantity_lst ,change , payment)
            print(" ")
            print("Thanks For shopping with Us :)")
            
            sys.exit(0)
        else:
            payment = float(input("Amount received: "))
            change = payment - total_price
            generate_bill(item, total_price, item_lst , price_lst , quantity_lst ,change , payment)
            print(" ")
            print("Thanks For shopping with Us :)")
          
            sys.exit(0)
    else:
        print("Continue Exploring the shop")

Output:
Upper output for customer to enter the item they want
Below part of the output which generate bill
(Sorry guys the output I can't put it in image form becuase SO not allow me so they changed my image to a link)

I had tried delete the with open('razershop.txt', 'r') as fin: and header = fin.readline().rstrip() and ( row = line.split() and change all the row variable to line fromfor line in fin: # Check each line for item_id then upadte quantity line = line.rstrip()from the decrement_item function. It end up with a infinity loop and last time I forgot what I had done with the code from the decrement_ item function the whole text in the txt file gone. I just want to know what should I do to make this work?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source