Open In App

Inventory Management with File handling in Python

Last Updated : 24 Aug, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Inventory management is a crucial aspect of any business that deals with physical goods. Python provides various libraries to read and write files, making it an excellent choice for managing inventory. File handling is a powerful tool that allows us to manipulate files on a computer’s file system using programming languages like Python. In this article, we will explore how to implement an inventory management system in Python, Tkinter using file handling.

Inventory Management System Project using Tkinter

Add New Product to Inventory

This function adds a new inventory entry into a text file. It retrieves the item name and quantity from input fields, opens the file in append mode, and writes item_name, item_qty. Then it clears the input fields.

Python3




def add_inventory():
    item_name = item_name_entry.get()
    item_qty = int(item_qty_entry.get())
    with open('inventory.txt', 'a') as file:
        file.write(f'{item_name},{item_qty}\n')
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)


Updating the Inventory

This function update_inventory() updates the existing item_name and item_qty according to the given input updated values. It opens the file in write mode and reads the data from the current inventory. It loops over each line, looks for a match with the item_name, and updates the record if one is found.

Python3




def update_inventory():
    item_name = item_name_entry.get()
    item_qty = int(item_qty_entry.get())
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    with open('inventory.txt', 'w') as file:
        for line in inventory_data:
            name, qty = line.strip().split(',')
            if name == item_name:
                file.write(f'{name},{item_qty}\n')
            else:
                file.write(line)
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)


Search and Display the Current Inventory

This function pulls the item_name from the input field that needs to be searched. It iterates through each line of the inventory.txt file while it is open in read-only mode. Here we are using result_label to show the item_name and amount if the item name matches the search name.

Python3




def search_inventory():
    search_name = item_name_entry.get()
    with open('inventory.txt', 'r') as file:
        for line in file:
            name, qty = line.strip().split(',')
            if name == search_name:
                result_label.config(text=f'{name} - {qty}')
                return
    result_label.config(text=f'{search_name} not found in inventory.')
    item_name_entry.delete(0, tk.END)


Removing an Item from the Inventory

The remove_inventory() function removes a specific inventory entry from the inventory.txt file. The function retrieves the item name to be removed from the input field. It opens the inventory.txt file in read mode and reads all the inventory data into a list. The file is then opened again in write mode. It iterates over each line in the inventory data, checks if the item name matches the one to be removed, and skips writing that line.

Python3




def remove_inventory():
    remove_name = item_name_entry.get()
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    with open('inventory.txt', 'w') as file:
        for line in inventory_data:
            name, qty = line.strip().split(',')
            if name != remove_name:
                file.write(line)
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)


Generate a Full Inventory List

The generate_inventory() function generates a full list of inventory entries from a text file. It reads the file and stores the inventory data in a list. The inventory data is then joined into a string with newlines. Finally, the string is displayed in the result_label to show the complete inventory list.

Python3




def generate_inventory():
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    inventory_text = '\n'.join(inventory_data)
    result_label.config(text=inventory_text)


Complete Code 

Python3




import tkinter as tk
 
# Function to add a new inventory entry
def add_inventory():
    item_name = item_name_entry.get()
    item_qty = int(item_qty_entry.get())
    with open('inventory.txt', 'a') as file:
        file.write(f'{item_name},{item_qty}\n')
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)
 
# Function to update an existing inventory entry
def update_inventory():
    item_name = item_name_entry.get()
    item_qty = int(item_qty_entry.get())
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    with open('inventory.txt', 'w') as file:
        for line in inventory_data:
            name, qty = line.strip().split(',')
            if name == item_name:
                file.write(f'{name},{item_qty}\n')
            else:
                file.write(line)
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)
 
# Function to search and display an inventory entry
def search_inventory():
    search_name = item_name_entry.get()
    with open('inventory.txt', 'r') as file:
        for line in file:
            name, qty = line.strip().split(',')
            if name == search_name:
                result_label.config(text=f'{name} - {qty}')
                return
    result_label.config(text=f'{search_name} not found in inventory.')
    item_name_entry.delete(0, tk.END)
 
# Function to remove an existing inventory entry
def remove_inventory():
    remove_name = item_name_entry.get()
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    with open('inventory.txt', 'w') as file:
        for line in inventory_data:
            name, qty = line.strip().split(',')
            if name != remove_name:
                file.write(line)
    item_name_entry.delete(0, tk.END)
    item_qty_entry.delete(0, tk.END)
 
# Function to generate a full list of inventory
def generate_inventory():
    with open('inventory.txt', 'r') as file:
        inventory_data = file.readlines()
    inventory_text = '\n'.join(inventory_data)
    result_label.config(text=inventory_text)
 
# create the main window
root = tk.Tk()
root.title("Inventory Management")
 
# input fields
item_name_label = tk.Label(root, text="Item Name:")
item_name_label.grid(row=0, column=0, padx=5, pady=5)
item_name_entry = tk.Entry(root)
item_name_entry.grid(row=0, column=1, padx=5, pady=5)
item_qty_label = tk.Label(root, text="Item Quantity:")
item_qty_label.grid(row=1, column=0, padx=5, pady=5)
item_qty_entry = tk.Entry(root)
item_qty_entry.grid(row=1, column=1, padx=5, pady=5)
 
# creating the buttons
add_button = tk.Button(root, text="Add Inventory",
                       command=add_inventory)
add_button.grid(row=2, column=0, padx=5, pady=5)
update_button = tk.Button(root, text="Update Inventory",
                          command=update_inventory)
update_button.grid(row=2, column=1, padx=5, pady=5)
search_button = tk.Button(root, text="Search Inventory",
                          command=search_inventory)
search_button.grid(row=3, column=0, padx=5, pady=5)
remove_button = tk.Button(root, text="Remove Inventory",
                          command=remove_inventory)
remove_button.grid(row=3, column=1, padx=5, pady=5)
generate_button = tk.Button(root, text="Generate Inventory",
                            command=generate_inventory)
generate_button.grid(row=4, column=0, padx=5, pady=5)
 
result_label = tk.Label(root, text="List")
result_label.grid(row=5, column=0, padx=5, pady=5)
 
root.mainloop()


Output :



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads