给出一个表格,包括员工号、员工姓名、入职日期、离职日期。
统计2020年每个月在职人数。
建议用Python给出核心业务代码。
给出一个表格,包括员工号、员工姓名、入职日期、离职日期。
统计2020年每个月在职人数。
建议用Python给出核心业务代码。
Excel表:
输出结果:
代码(请自行删除中间的输出):
import xlrd
class Read_Ex():
def read_excel(self):
# 打开excel表,填写路径
book = xlrd.open_workbook("worker.xlsx") # Excel文件名
# 找到sheet页
table = book.sheet_by_name("Sheet1")
# 获取总行数总列数
row_Num = table.nrows
col_Num = table.ncols
s = []
key = table.row_values(0) # 这是第一行数据,作为字典的key值
if row_Num <= 1:
print("没数据")
else:
j = 1
for i in range(row_Num - 1):
d = {}
values = table.row_values(j)
for x in range(col_Num):
# 把key值对应的value赋值给key,每行循环
d[key[x]] = values[x]
j += 1
# 把字典加到列表中
s.append(d)
return s
def count(work): # 统计每个月在职人数
k = 0
for m, v in work.items():
if star <= k and end > k:
v = v + 1
work[m] = v
print(m, v)
k += 1
def on_the_job(i): # 计算某个员工在职的月份
star = 0 # 在职月份
end = 0 # 离职月份
star_year = int(i['入职日期'][0:4])
star_month = int(i['入职日期'][5:7])
if (i['离职日期']):
end_year = int(i['离职日期'][0:4])
end_month = int(i['离职日期'][5:7])
else:
end_year = 0
end_month = 0
if star_year < 2020:
if end_year:
if end_year == 2020:
end += end_month
else:
end += 12
elif star_year == 2020:
star += star_month - 1
if end_year:
if end_year == 2020:
end += end_month
else:
end += 12
return star, end
if __name__ == '__main__':
work = {'Jan': 0, 'Feb': 0, 'Mar': 0, 'Apr': 0, 'May': 0, 'Jun': 0, 'Jul': 0, 'Aug': 0, 'Sep': 0, 'Oct': 0,
'Nov': 0, 'Dec': 0}
r = Read_Ex()
s = r.read_excel() # 读取Excel表
for i in s: # 提取具体员工数据
star, end = on_the_job(i) # 获取当前员工在职期间的月份
print(star, end)
print(i)
count(work=work) # 统计每月在职人数
print(work)
print('2020年每月在职人数为:')
print(work)