B. Sato
B. Sato

Reputation: 11

Python 3.X combining similar lines in .txt files together

A question regarding combining values from a text file into a single variable and printing it.

An example I can give is a .txt file such as this:

School, 234
School, 543

I want to know the necessary steps to combining both of the school into a single variable "school" and have a value of 777.

I know that we will need to open the .txt file for reading and then splitting it apart with the .split(",") method.

Code Example:

schoolPopulation = open("SchoolPopulation.txt", "r")
for line in schoolPopulation:
    line = line.split(",")

Could anyone please advise me on how to tackle this problem?

Upvotes: 0

Views: 58

Answers (3)

Mikhail Gerasimov
Mikhail Gerasimov

Reputation: 39536

Python has rich standard library, where you can find classes for many typical tasks. Counter is what you need in current situation:

from collections import Counter
c = Counter()


with open('SchoolPopulation.txt', 'r') as fh:
    for line in fh:
        name, val = line.split(',')
        c[name] += int(val)

print(c)

Upvotes: 1

wpercy
wpercy

Reputation: 10090

Something like this?

schoolPopulation = open("SchoolPopulation.txt", "r")
results = {}
for line in schoolPopulation:
    parts = line.split(",")
    name = parts[0].lower()
    val = int(parts[1])
    if name in results:
        results[name] += val
    else:
        results[name] = val
print(results)
schoolPopulation.close()

You could also use defaultdict and the with keyword.

from collections import defaultdict

with open("SchoolPopulation.txt", "r") as schoolPopulation:
    results = defaultdict(int)
    for line in schoolPopulation:
        parts = line.split(",")
        name = parts[0].lower()
        val = int(parts[1])
        results[name] += val

print(results)

If you'd like to display your results nicely you can do something like

for key in results:
    print("%s: %d" % (key, results[key]))

Upvotes: 0

Seekheart
Seekheart

Reputation: 1173

school = population = prev = ''
pop_count = 0
with open('SchoolPopulation.txt', 'r') as infile:
     for line in infile:
          line = line.split(',')
          school = line[0]
          population = int(line[1])
          if school == prev or prev == '':
               pop_count += line[1]
          else:
               pass #do something else here
          prev = school

Upvotes: 0

Related Questions