Ich werd noch bekloppt ! Newbie TXT einlesen addieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
guido
User
Beiträge: 2
Registriert: Freitag 4. März 2005, 20:46

Freitag 4. März 2005, 21:10

Moin moin,

ich beschäftige mich seit kurzer Zeit mit Python bin totaler Newbie und habe folgendes vor.
Ich habe eine TXT. Datei, die bestimmte durch # getrennte Werte hat.
BSP:
12345#20050201#1#3.7700#6#49#10...#...# usw.
12345#20050201#1#0.5300#10#53#11
12345#20050201#1#4.9000#12#16#17
12345#20050202#1#5.0800#6#55#12#

immer dann wenn die Werte 12345 (Kdn Nr.) und 20050201 (Datumsangaben) gleich sind, soll er die dicken Zeiten addieren und die Summe mit den Werten (Kd.Nr und Datum) ausgeben.

also z.B. 12345 20050201 9,2

sollte für einen Tag und nur eine Kd.Nr ein Satz vorhanden sein
auch nur diesen Satz ausgeben:

12345 20050201 5.08

das Ganze alles untereinander und bis das txt file vorbei ist.
Dazu habe ich folgendes Skript verfasst (bitte nicht lachen :
:lol:

Code: Alles auswählen

#! /usr/bin/env python

f=open("TEST.TXT","r")

a=f.readline().split('#')
datum, persnr, IST =a[1], a[0], a[16]
  
letztes_datum = datum
letzte_persnr = persnr
summe_ist = float(IST)

while a:
   a=f.readline().split('#')
   if len(a) != 1:
     datum, persnr, IST =a[1], a[0], a[16]
     if letztes_datum != datum or letzte_persnr != persnr:
   	summe_ist = float(IST)
   	letztes_datum = datum
   	letzte_persnr = persnr
        print datum, persnr, summe_ist
     else:
      summe_ist = summe_ist + float(IST) 
      print datum, persnr, summe_ist
   else:
     break

f.close()
Nun das Problem, als Erstes wird immer der erste Datensatz weggelassen.
Gut Fehler ist eindeutig lese ja den String ein, ohne ihn auszugeben.
Mir fällt aber keine andere Möglichkeit ein.

Und beim aufaddieren werden alle Werte angezeigt inkl der richtigen Summe.

Ich will natürlich nicht die Zwischensummen, sondern immer nur die Gesamtsumme pro Kd-Nr. Pro Tag.

Ich brüte jetzt schon ein paar Tage darüber und komme nicht weiter.
Für mich ein Riesenproblem, für euch sicherlich ein Klaks.

Please Pimp my Python !!!!
Zuletzt geändert von guido am Samstag 5. März 2005, 14:54, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 4. März 2005, 22:19

Mein versuch:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

vals = {}
f = file('file.txt', 'r')
for line in f:
    line = line.splitlines()[0]
    lsplit = line.split('#', 2)
    dval = lsplit[0] + '#' + lsplit[1]
    try:
        vals[dval].append(lsplit[2])
    except KeyError:
        vals[dval] = []
        vals[dval].append(lsplit[2])

f.close()

sums = {}
for tag in vals:
    sums[tag] = 0
    for nummer in vals[tag]:
        zahl = float(nummer.split('#')[1])
        sums[tag] += zahl
        
print sums
Aber nur schnell hingeschmiert, also erwarte micht zu viel.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
guido
User
Beiträge: 2
Registriert: Freitag 4. März 2005, 20:46

Samstag 5. März 2005, 14:53

Moin moin

das Script hat mir nen guten Denkanstoß gegeben.
Und manchmal hilft ne Nacht drüber schlafen auch.

Hab meins jetzt angepaßt und es geht !!!

So denn herzlichen Dank und schönes WE noch !!!

Gruß Guido
Antworten