String mit variabler Anzahl von Parameter-Paaren parsen

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
BlackJack

@Hyperion: Ist ein hübsches Beispiel dafür warum Abkürzungen in Bezeichnern keine so gute Idee sind. :-)
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Ein bisschen auf numerix' code aufgebaut. Vielleicht kann es jemand gebrauchen / verbessern.

Wie bekomme ich ein negatives datetime.timedelta ("Unterstunden") dazu, z.B. "-1:50" darzustellen, anstelle von "-1 day, 22:30:00" ?

Code: Alles auswählen

import sys
import time, datetime
import re
#~ import str

filename = sys.argv[1]
lineno = 0
delimiter = "\t"
year = 2009
day = 8 # hrs
dayno = 0

overtime = datetime.timedelta(0)

with open(filename, 'r') as f:
  sys.stderr.write("file %s opened\n" % (filename))
  for line in f:
    lineno += 1
    daytime = datetime.timedelta(0)
    pause = datetime.timedelta(0)
    sys.stderr.write("%03d: " % (lineno))
        
    if len(line.strip()) == 0:              # empty
      sys.stderr.write("(empty)\n")
      continue
    elif re.match("\s*#\s*", line):         # comment
      sys.stderr.write("(comment)\n")
      continue
    else:                                   # parse
      dayno += 1
      ws = line.split()
      zeiten = filter(lambda s:"0000"<=s<="2359",ws[1:])
      ws[1:] = zip(zeiten[::2],zeiten[1::2])+[" ".join(ws[len(zeiten):])]
      #~ print ws
      date = datetime.datetime.strptime(ws[0], "%d%m").replace(year).date()
      print date,
      i = 0
      while(1):
        i+=1
        if type(ws[i]) is tuple:
          if i>1:
            oldend = end
          start = datetime.datetime.strptime(ws[i][0], "%H%M")
          end = datetime.datetime.strptime(ws[i][1], "%H%M")
          
          daytime += end-start
          if i>1:
            pause += start-oldend
        else:
          break
    print "Tag:", dayno, "Tagessumme:", daytime, "Pause:", pause, "Überstunden:", daytime-datetime.timedelta(hours=day)
    overtime += daytime-datetime.timedelta(hours=day)
  sys.stderr.write("file %s closed\n" % (filename))
print "Überstunden: ", overtime
sys.stderr.write("done.\n")
Antworten