Seite 1 von 1

Ich werd noch bekloppt ! Newbie TXT einlesen addieren

Verfasst: Freitag 4. März 2005, 21:10
von guido
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 !!!!

Verfasst: Freitag 4. März 2005, 22:19
von Leonidas
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.

Habs gelöst !!! Herzlichen Dank !!!

Verfasst: Samstag 5. März 2005, 14:53
von guido
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