2016-06-10 3 views
-1

Ich habe eine Textdatei data.txt genannt, die in ihm die folgenden Informationen enthaltendie Daten in einer Textdatei Arrangieren mit Python: Gruppendaten für Monat

03/05/2016 502 
04/05/2016 502 
05/05/2016 501 
07/05/2016 504 
09/05/2016 505 
13/05/2016 506 
23/05/2016 501 
30/05/2016 501 
02/06/2016 502 
04/06/2016 502 
06/06/2016 501 
07/06/2016 504 
08/06/2016 505 
13/06/2016 506 
25/06/2016 499 
31/06/2016 501 
04/07/2016 501 

ich die Ausgabe will so sein. Diese Daten sollten reslt.txt (AKTUALISIERT)

03/05/2016 - 30/05/2016 4022 
02/06/2016 - 31/06/2016 4020 
01/07/2016 - 01/07/2016 501 

Die dritte Spalte in reslt.txt Datei ist die Summe der Werte der zweiten Spalte in data.txt Datei mit dem Namen in einer anderen Datei gespeichert werden. Ich verwende Python 2.7 und ich weiß nicht, wie diese erreichen bitte mir helfen guyz

UPDATE 2

03/05/2016 502 
04/05/2016 502.2 
05/05/2016 501.9 
07/05/2016 504.6 
09/05/2016 505 
13/05/2016 506.1 
23/05/2016 501.3 
30/05/2016 501.4 
02/06/2016 502 
04/06/2016 502 
06/06/2016 501 
07/06/2016 504 
08/06/2016 505 
13/06/2016 506 
25/06/2016 499 
31/06/2016 501 
04/07/2016 501 
+3

Was haben Sie bis jetzt geschrieben? – Quirk

+0

@Quirk Sir Ich verstehe nicht, welche Logik, die ich muss, um dies zu erreichen –

+1

Nun, es gibt ein paar Dinge, die Sie tun müssen: 1. Lesen Sie die Eingabedateien eine Zeile zu einer Zeit. Parsen Sie den Monat von der Zeile. Der Tag spielt keine Rolle. 2. Wenn Monat und Jahr gleich sind, behalten Sie einfach die Summe des zugehörigen Integer-Wertes. – Quirk

Antwort

0

ein bisschen Sieht aus wie verändert die Ausgabeanforderung! Dennoch sollte dies genügend Motivation bieten, die Ecken und Kanten zu glätten.

dataStore = {} 

# Method to process an input line 
def processLine(dateStr, val): 
    if dateStr not in dataStore: 
    dataStore[dateStr] = val 
    else: 
    dataStore[dateStr] += val 

# Method to read input file line by line 
def doStuff(inFile, outFile): 
    with open(inFile, 'r') as fp: 
    for line in fp: 
     dateStr, val = line.split() 

     # cast decimal value to integer 
     val = int(val) 

     # process the date string to only keep the month and year 
     dateStr = dateStr.split('/') 
     dateStr = "/".join((dateStr[1], dateStr[2])) 

     processLine(dateStr, val) 

    # once you are done reading file, generate output 
    writeBuf = [] 
    for key in dataStore: 
    writeBuf.append((key, dataStore[key])) 
    writeBuf.sort() 

    with open(outFile, 'wb') as fp: 
    for tup in writeBuf: 
     line = '01/'+tup[0]+' - 30/'+tup[0] + ' ' + str(tup[1]) + '\n' 
     fp.write(line) 

if __name__ == '__main__': 
    inFile = 'data.txt' 
    outFile = 'result.txt' 

    doStuff(inFile, outFile) 

Sie können dies problemlos auf den Tag erweitern. Ändere einfach den Teil, wo ich die dateStr verarbeite. Die Methode processLine würde sich ebenfalls ändern.


Stackoverflow ist nicht bedeutete andere, um Ihre gesamte Hausaufgaben zu machen. Zeigen Sie Ihren aktuellen Fortschritt und zögern Sie nicht, um Hilfe mit Fehlern und Verbesserungen zu bitten. Bitte denken Sie daran, wenn Sie das nächste Mal um Hilfe bitten.

+0

sicher sir ich, dass im Auge behalten werden –

+0

Vielen Dank u sehr viel Sir –

0
import re 
from collections import defaultdict 

def sum_months(data_path): 
    with open (data_path, 'r') as f: 
     rows = f.readlines() 
     sumdict = defaultdict(int) 
     for row in rows: 
      month = re.findall("/\d{2}/\d{4}", row)[0] 
      sum = re.findall("\d+$", row)[0] 
      sumdict[month] += eval(sum) 
    return sumdict 

def pad_strings_and_create_rows(sumdict): 
    rows = [] 
    for k, v in sumdict.iteritems(): 
     rows.append('01' + k + ' - ' + '30' + k + ' ' + str(v)) 
    return list(sorted(rows))    

def write_result_to_file(results_lst): 
    with open('reslt.txt', 'a') as f: 
     for row in results_lst: 
      f.write(row + '\n') 

write_result_to_file(pad_strings_and_create_rows(sum_months('data.txt'))) 
+0

Thank u Sir .......... –

+0

Sie sind willkommen, Sir –

+0

ur-Code dosent Arbeit für Gleitkommazahlen ... Welche Veränderungen sollte ich machen, soo, dass es für fllaoting Punkt Werte zu laufen kann –

Verwandte Themen