Home > database >  Python: How to sum numbers in text file with strings when meet conditions
Python: How to sum numbers in text file with strings when meet conditions

Time:02-22

I'm doing an inventory system which require for me to print distribution list of particular item. If the particular item has distribute to the same hospital for more than 1 time, it need to sum the quantity together.

The code that i'm writing now only allow for me to print the distribution list, it won't sum the quantity together if the item code and hospital code is same. (Check with code but not name to sum it up) How can i make it sum up together if hospital code and item code is same?

I'm only allow to use list, dictionary and pandas are not allowed.

def search_functions():
      try:
            fhand = open("distribution.txt","r")
      except:
            print("You haven't distribute any item yet!\n")

      searchInput = input("\nEnter item code to search: ")
      print()
      for line in fhand:
            lines = line.strip()
            if searchInput.lower() in lines.lower():
                  print(lines)
                  continue
      print()
      fhand.close()
search_functions()

Inside the text file

first item is hospital code, second is name, 3rd is item code, 4th is item name and the last one is quantity.

distribution.txt text file

HSPT001,Care Medical Hospital,HC,Head Cover,9

HSPT001,Care Medical Hospital,HC,Head Cover,6

HSPT002,Community Health Service,HC,Head Cover,7

The output need to be like below, when the searchinput is HC

HSPT001, Care Medical Hospital, HC, Head Cover, 15

HSPT002, Community Health Service, HC, Head Cover, 7

instead of

HSPT001,Care Medical Hospital,HC,Head Cover,9

HSPT001,Care Medical Hospital,HC,Head Cover,6

HSPT002, Community Health Service, HC, Head Cover, 7

CodePudding user response:

worked on your issue using pandas, and below code solves it:

import pandas as pd
# "hospital_code", "name","item_code","item_name","quantity"
data = pd.read_csv("distribution_list.txt",names=["hospital_code", "name","item_code","item_name","quantity"])
print(data.groupby(["hospital_code", "name","item_code","item_name"]).sum())

CodePudding user response:

You can use defaultdict for this:

from collections import defaultdict
result = defaultdict(float)

with open("distribution.txt") as f:
    data = f.read().split("\n")
    data = [line.strip().lower() for line in data]

for line in data:
    elements = line.split(",")
    # ["HSPT001", "Care Medical Hospital", "HC", "Head Cover", "6"]
    if len(elements) != 5:
        continue
    item_code = elements[2].lower().strip() # "hc"
    quantity = float(elements[-1].strip()) # "6"
    result[item_code]  = quantity

searchInput = input("\nEnter item code to search: ").strip().lower()
print(result.get(searchInput, 0))

If your are not allowed to use dict then just add quantity to a variable:

result = 0
for line in data:
    elements = line.split(",")
    # ["HSPT001", "Care Medical Hospital", "HC", "Head Cover", "6"]
    if len(elements) != 5:
        continue
    item_code = elements[2].lower().strip() # "hc"
    quantity = float(elements[-1].strip()) # "6"
    result  = quantity

CodePudding user response:

try it, use pandas

import pandas as pd

df = pd.read_table("distribution.txt text file", sep=",", names=["hospital_code", "name","item_code","item_name","quantity"])

group_df = df.groupby(["hospital_code", "name","item_code","item_name"]).sum().reset_index()

for idx, row in group_df.iterrows():
    for col in ["hospital_code", "name","item_code","item_name","quantity"]:
        print(row[col], end=" ")
    print()
  • Related