本帖最后由 Lengxiy 于 2023-3-22 21:55 编辑
写了一个下午,写的有点白痴尤其是关于下表越界问题......其实还是有点问题,好像写反了,不过就当第一次留个学习记录吧,后面慢慢改
业务来源:
昨天老师突然给了我两个excle 每个excle都有5w的学生进出时间以及姓名学号数据等等......
其中A列为姓名,B列为学号,H列为校门口机器判断的学生是进去还是出来,K列是进/出时间
excle我先进行了筛选和格式更改的,因为统一格式(我改为了常规格式)后可以减少其他不必要的问题
由于老师需要的是进出校门时间大于10s小于120s的同学的信息留下来,所以有需要的请自己改改代码应该就能凑合着用
文件例子地址(已经清除了铭感信息):https://alist.zymys.cn/%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98/%E4%B8%BE%E4%BE%8B%E5%AD%90
写的代码跟驼屎一样,我也知道,大佬勿喷,毕竟第一次做,诚心求教{:1_909:}
[Python] 纯文本查看 复制代码
import xlrd
from xlrd import xldate_as_tuple
from datetime import datetime
worksheet = xlrd.open_workbook('./new1.xlsx')
sheet_names = worksheet.sheet_names() # 获取第一个工作表
for sheet_name in sheet_names:
sheet = worksheet.sheet_by_name(sheet_name)
rows = sheet.nrows # 获取行数
cols = sheet.ncols # 获取列数
##获取工号
# 获取第二列内容,数据格式为此数据的原有格式(原:字符串,读取:字符串;原:浮点数, 读取:浮点数)
#下标从0开始为1
cols_gonghaos = sheet.col_values(1)
#获取姓名
cols_names = sheet.col_values(0)
##获取出入
cols_inouts = sheet.col_values(5)
##获取出入时间
cols_times = sheet.col_values(8)
all_content = []
in_time = []
out_time = []
first_out = ""
first_out_time = 0
first_in = ""
first_in_time = 0
in_x = []
x = 1
i = 1
f = True
while i < rows-1:
i = x
x = i
if x >= rows-1:#判断下标是否越界,越界即结束
break
while f == True:
if x >= rows-1: #判断下标是否越界,越界即结束
break
if cols_names[x] == cols_names[x+1]: #匹配 当前名字 和 后面一个名字 是否一样
if cols_inouts[x] == cols_inouts[x+1]: #匹配当前名字下 如果都是 入或者出 跳过记录
x = x + 1
break
elif cols_inouts[x] == '入' and cols_inouts[x+1] == '出': #匹配 如果先是 入 后一个是 出 的话跳过
x = x + 1
break
else:
#获取出去时间
first_out_time = cols_times[x]
date_tuple_out = xldate_as_tuple(first_out_time, 0) # 元组类型数据
date_object_out = datetime(*date_tuple_out) # 日期时间对象
#获取进入时间
first_in_time = cols_times[x+1]
date_tuple_in = xldate_as_tuple(first_in_time, 0)
date_object_in = datetime(*date_tuple_in)
start = date_object_out
end = date_object_in
time = (end - start).total_seconds() #这个time为多少秒
# time = (end - start).total_seconds()/60 #这个time为多少分钟的计算
#清空
first_out = ""
first_out_time = 0
first_in = ""
first_in_time = 0
if abs(time) > 10 and abs(time) < 120:
all_content.append(int(cols_gonghaos[i]))
in_time.append(date_object_in)
out_time.append(date_object_out)
in_x.append(x) #用于确定筛选出来的时间在单元格的第几行
x = x + 2
else:
x = x + 1
break
with open("学号.txt", 'w') as f:
for i in all_content:
f.write(str(i) + '\n')
with open("进入时间.txt", 'w') as f:
for i in in_time:
f.write(str(i) + '\n')
with open("出去时间.txt", 'w') as f:
for i in out_time:
f.write(str(i) + '\n')
|