2016-05-03 6 views
1

Ich habe eine folgende Datendarstellung in einer Textdatei mit dem Namen alsDatenextraktion und seine Summierung mit Python

data.txt

03/05/2016 11:00 50 

03/05/2016 11:10 10 

03/05/2016 11:20 30 

03/05/2016 11:30 40 

03/05/2016 11:40 40 

03/05/2016 11:50 50 

03/05/2016 11:60 70 

03/05/2016 12:00 25 

03/05/2016 12:10 69 

03/05/2016 12:20 25 

03/05/2016 12:30 59 

03/05/2016 12:40 25 

03/05/2016 12:50 29 

03/05/2016 12:60 25 

I bestimmte mathematische Operation, wie durchgeführt werden soll, dass ich das Ende erhalten das Ergebnis als

03/05/2016 11:00 - 12:00 290 

03/05/2016 12:00 - 13:00 257 

wo dieses Ergebnis in einer anderen Textdatei sagen gespeichert data1.txt

hier 290 ist die Summe der Daten von 11.00 bis 12.00 Uhr und 257 ist die Summe der Daten von 12.00 bis 13.00 Uhr

ich diesen Code in Python schreiben will 2.7

Wie kann ich dies erreichen ....

**UPDATED** 


import time 
import datetime 

while 1: 
    final_sensorvalue = 0 
    st_time = time.time() 
    crntdatetime = 0.0 

    while ((time.time() - st_time) < 600.0): 
     sensorvalue = 10 # read sensor value 
     final_sensorvalue = final_sensorvalue + sensorvalue 
     time.sleep(2) 




    f = open('data.txt','a') 
    crntdatetime = datetime.datetime.now() 
    timestamp = crntdatetime.strftime("%d/%m/%Y %H:%M") 

    outstring = str(timestamp)+" "+str(final_sensorvalue)+ "\n" 
    print outstring 
    f.write(outstring) 
    f.close() 
    time.sleep(2) 
+1

Können Sie bitte zeigen Sie den Code, den Sie bisher geschrieben haben? – salomonderossi

+0

@salomonderossi aktualisiert –

Antwort

1

Sie könnten die Linien zu Counter Objekte umwandeln, wo der StichtagistStunde ('03/05/2016 11') und Wert ist Nummer wie int. Dann könnten Sie alle Counter Objekte hinzufügen zusammen, die Elemente sortieren und schreibt sie in eine Datei:

from collections import Counter 
import re 

with open('test.txt') as f: 
    res = sum((Counter({x.group(1): int(x.group(2))}) 
       for x in (re.search('(.*?):.*\s(\d+)', line) for line in f) if x), 
       Counter()) 

with open('output.txt', 'w') as f: 
    f.writelines('{0}:00 - {1}:00 {2}\n'.format(k, int(k.split()[-1]) + 1, v) 
       for k, v in sorted(res.iteritems())) 

Inhalt von output.txt:

03/05/2016 11:00 - 12:00 290 
03/05/2016 12:00 - 13:00 257 
+0

Vielen Dank soo .... –

1

Sie können wie folgt versuchen:

fo = open("data.txt","r") 
lines = fo.readlines() 
#print lines 
d={} 

for i in range(0,len(lines),2): 
    l = lines[i].split() 
    if int(l[1].split(":")[0]) != 23: 
     time = l[1].split(":")[0] + ":00-" + str(int(l[1].split(":")[0])+1) +":00" 
    else: 
     time = l[1].split(":")[0] + ":00-0:00" 
    #key = l[0]+"_"+l[1].split(":")[0] 
    key = l[0]+"_"+time 
    if key in d: 
     d[key] = int(d[key]) + int(l[2]) 
    else: 
     d[key] = int(l[2]) 
print d 


>>> 
{'03/05/2016_11:00-12:00': 290, '03/05/2016_12:00-13:00': 257} 
+0

Vielen Dank .... –

+0

Ur Code hat mir geholfen ..... –

+0

Sie sind willkommen – Harsha