Seite 1 von 1

Verfasst: Mittwoch 28. Oktober 2009, 19:33
von BlackJack
@Hyperion: Ist ein hübsches Beispiel dafür warum Abkürzungen in Bezeichnern keine so gute Idee sind. :-)

Einfache Zeiterfassung mit Textdatei

Verfasst: Mittwoch 28. Oktober 2009, 22:36
von whaeva
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")