python处理excle筛选学生“出”“进”大门时间
本帖最后由 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:}
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 == cols_names: #匹配当前名字和后面一个名字是否一样
if cols_inouts == cols_inouts: #匹配当前名字下 如果都是入或者出 跳过记录
x = x + 1
break
elif cols_inouts == '入' and cols_inouts == '出':#匹配如果先是入 后一个是 出的话跳过
x = x + 1
break
else:
#获取出去时间
first_out_time = cols_times
date_tuple_out = xldate_as_tuple(first_out_time, 0)# 元组类型数据
date_object_out = datetime(*date_tuple_out)# 日期时间对象
#获取进入时间
first_in_time= cols_times
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))
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')
感谢分享,学习一下
楼主加油~坚持写代码一定会有回报的 感谢楼主分享,学习一下 感谢楼主分享,学习一下 两个excle每个excle ???这 使用pandas更方便只需要合并一下excel 然后判断时间列就可以了 a2523188267 发表于 2023-3-21 16:43
两个excle每个excle ???这
我只能更改上面的文件一个一个文件跑了拉,毕竟还不太会,对我来说最蠢最简单的方法就是更改文件名,跑程序,反正老师给我甩了两个excle,每天两个 狐白本白 发表于 2023-3-21 17:01
使用pandas更方便只需要合并一下excel 然后判断时间列就可以了
谢大哥,有时间研究研究pandas,主要是现学现做搜的关键词是:python 如何处理excle就这样了,所以先学习的xlrd 能不能不要有错别字呀
页:
[1]
2