Search code examples
pythonlistdatetimestrptimestrftime

How do I add together all numbers from the same week into a list?


I've been googling for answers for about 2 days now and I'm still stuck.

I have a huge list of dates and numbers like this:

 1.1.2018 0:00;2590
 3.1.2018 1:00;2530
 4.2.2018 2:00;1700
 6.2.2018 3:00;2340
 18.3.2018 4:00;1800
 15.4.2018 5:00;2850
 ...

And I need to add all numbers together that have the same week number and return total of numbers in a week like this:

0;0
1;549730
2;645010
3;681320
4;677060
5;698450
...etc
52;576280
53;81640

This is my code so far, I've separated the dates and numbers in their own lists but not sure how to go on from here. I'm supposed to use strftime %W somehow, but don't know how.

import datetime
from datetime import date
from datetime import datetime

def main():
    file = open("2018Electricity.txt", "r")
    line = file.readline()
    time_list = []
    electricity_list = []
    total = []

    for i in file:
        time = i.strip().split(';')[0]
        electricity = i.strip().split(';')[1]
        time_list.append(datetime.strptime(time, '%d.%m.%Y %H:%M'))
        electricity_list.append(electricity)
        
    file.close()

main()

Solution

  • Just use a simple dictionary and run it sequentially.

    import datetime
    def solution():
        data = [
            "1.1.2018 0:00;2590",
            "3.1.2018 1:00;2530",
            "4.2.2018 2:00;170",
            "6.2.2018 3:00;2340",
            "18.3.2018 4:00;1800",
            "15.4.2018 5:00;2850"
        ]
    
        result = {} # store in a dictionary
    
        for date in data:
            day = int(date.split(".")[0])
            month = int(date.split(".")[1])
            year = int(date.split(".")[2][0:5])
            week = datetime.date(year, month, day).isocalendar()[1]
            if week not in result:
                result[week] = 0
            result[week] += int(date.split(";")[1])
        return result
    
    result = solution()
    for week, value in result.items():
        print(f"{week};{value}")