Python应用:加班时间计算器
时间:2007-04-29 来源:wibrst
不用说啥了,注释很清楚了~
# encoding:gb2312
#
# 本模块利用timeItv模块提供的转换器进行加班时间统计
# 输入文件分行列出每天的签到和签退时间
# 读入后计算每个有效行的加班时间
# 并在最后对超过最低时限的加班时间做出统计
# 结果输出到另一文件中
# 其中两种方式确定输入文件名:bModeInput来控制
import timeItv
import os,sys,re
def file2list (_uf):
f = file(_uf,'r')
l = f.readlines()
return l
def list2file (_uf,_l):
f = file(_uf,'w')
f.writelines(_l)
f.close()
def exitByMsg (_sMsg):
print _sMsg
sys.exit()
def getTimeAddWork (_sb,_se):
_iTimeAdd = timeItv.time2itv(_se) - timeItv.time2itv(_sb) - iTimeNormal
return timeItv.itv2time(_iTimeAdd ),_iTimeAdd
def processFile (_uf):
_lOutput = []
_iTimeSumAdd = 0
_lInput = file2list(_uf)
_pc = re.compile( r'^\s*(?P<sTimeBegin>\S+)\s*(?P<sTimeEnd>\S+)\s*$' )
for _l in _lInput:
_m = _pc.match(_l)
if _m:
print 'm'
_sTimeAddWork,_iTimeAddWork = getTimeAddWork(*_m.group('sTimeBegin','sTimeEnd') )
if _sTimeAddWork > sTimeLimitBelow:
_iTimeSumAdd += _iTimeAddWork
_lOutput.append( _sTimeAddWork +'\n' )
else:
print 'n'
_lOutput.append( '\n' )
_lOutput.append( '超过' + sTimeLimitBelow + '的统计结果:' + timeItv.itv2time(_iTimeSumAdd))
return _lOutput
def getFilePath ():
_uf = uCoFinancialBase + raw_input('输入加班计算时间文件名\n'+uCoFinancialBase+'>').strip()
if os.path.isfile(_uf):
return _uf
else :
exitByMsg('file not found: '+_uf)
def getOutFilePath (_ufIn):
_iIdxDot = _ufIn.rfind('.')
return _ufIn[:_iIdxDot] + '_deal' + _ufIn[_iIdxDot:]
if __name__ == '__main__':
# 基础路径
uCoFinancialBase = r'E:\Company Financial'+os.sep
# **输入模式
bModeInput = 'auto'
if bModeInput == 'auto':
ufInput = uCoFinancialBase + r'time_count_temp.txt'
elif bModeInput == 'interact' :
# 交互输入文件路径
ufInput = getFilePath()
# 正常工作时间
iTimeNormal = timeItv.time2itv('18:00:00') - timeItv.time2itv('09:15:00')
# 统计限制时间下限
sTimeLimitBelow = '00:59:59'
# 处理输入
lResult = processFile (ufInput)
# 输出文件路径
ufOutput = getOutFilePath(ufInput)
# 输出结果
list2file(ufOutput,lResult)
相关阅读 更多 +