0

I have a txt file(named file.txt) that contains two columns(ip-address and bytes, [,,]-separator)

file = open(file='file.txt')

print(file.read())

output:
13.107.4.52,,323
184.51.238.190,,505
184.51.238.190,,505
96.17.7.76,,1066
185.48.81.253,,1061
40.127.240.158,,1443
13.107.42.16,,1544
20.190.160.15,,6342
20.86.249.62,,2700
52.109.12.19,,1435
52.109.12.19,,1435
184.51.238.190,,425
40.127.240.158,,1978
20.73.130.64,,2674
204.79.197.200,,943
204.79.197.200,,943
204.79.197.200,,776

I need to combine lines with duplicate ip-addresses and sum bytes, sorted by bytes. The same thing like excels's "Consolidate data in multiple worksheets"

I need to get this:

20.190.160.15,,6342
40.127.240.158,,3421
52.109.12.19,,2870
20.86.249.62,,2700
20.73.130.64,,2674
204.79.197.200,,2662
13.107.42.16,,1544
184.51.238.190,,1435
96.17.7.76,,1066
185.48.81.253,,1061
13.107.4.52,,323

I really don't understand how to do this.
Thanks in advance for your time!

baykos
  • 3
  • 1
  • 1
    Make a dictionary with key as ip_address and value as list with bytes...once done...just return key and sum of values – vks Sep 14 '22 at 10:07
  • `d = {}; for line in file: ip,value = line.split(',,'); value = int(value); d[ip] = d.get(ip,0) + value` – Stef Sep 14 '22 at 10:09

1 Answers1

1

use dict

from collections import defaultdict
d = defaultdict(int)
with open(file='file.txt') as f:
    for line in f:
        k,v = line.split(',,')
        d[k] += int(v)
for k,v in sorted(d.items(), key=lambda x:x[-1], reverse=True):
    print(f'{k},,{v}')
AsukaMinato
  • 1,017
  • 12
  • 21