String mit variabler Anzahl von Parameter-Paaren parsen
@Hyperion: Ist ein hübsches Beispiel dafür warum Abkürzungen in Bezeichnern keine so gute Idee sind.
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" ?
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")