关闭

某大数据_学生在宿舍的进出时间记录

130人阅读 评论(0) 收藏 举报
分类:
#coding:utf-8

import sys
import xlrd
import time
import threading
from Queue import Queue
from datetime import datetime
from operator import itemgetter
from xlrd import xldate_as_tuple

def dealExcle(filename):
    myqueue = Queue()

    X_thousand = []
    all_content = []

    # deal with excel
    data = xlrd.open_workbook(filename)
    table = data.sheets()[0]

    rows = table.nrows
    cols = table.ncols

    for i in range(rows):

        # 去除 excle 第一行      
        if i == 0:
            continue

        # 每 10000 个数据 取一个 列表
        if i%10000 == 0:
            X_thousand = sorted(X_thousand,key=itemgetter(0))
            all_content.append(X_thousand)
            X_thousand = []

        # 读取 excel 每一行 因为时间直接读取, 有问题 会用浮点型显示
        row_content = []
        for j in range(cols):
            ctype = table.cell(i, j).ctype
            cell = table.cell_value(i, j)
            if ctype == 3:
                date = datetime(*xldate_as_tuple(cell, 0))
                cell = date.strftime('%Y/%d/%m %H:%M:%S')
            row_content.append(cell)

        X_thousand.append(row_content)

    # 将所有数据导入 队列
    for x in all_content:
        myqueue.put(x)

    return myqueue

def subTime(d2,d1):
    temp = time.strptime(d1, "%Y/%d/%m %H:%M:%S")
    timestampd1 = time.mktime(temp)

    temp = time.strptime(d2, "%Y/%d/%m %H:%M:%S")
    timestampd2 = time.mktime(temp)

    if timestampd2 > timestampd1:
        return timestampd2 - timestampd1
    else :
        return timestampd1 - timestampd2


# ok
def addTime(X_thounsand,Startnum,Endnum):
    num = 0 
    for x in xrange(Startnum+1,Endnum+1):
        if X_thounsand[x-1][2] == 1 and X_thounsand[x][2] == 0:
            num = num + subTime(X_thounsand[x][1],X_thounsand[x-1][1])
    return num


# 处理 X_thousands 的数据 并输出
def run(myqueue):
    while myqueue.qsize() > 0:
        X_thounsand = myqueue.get()

        flag = 1
        for x in xrange(1,len(X_thounsand)):
            if X_thounsand[x-1][0] == X_thounsand[x][0]:
                flag = flag + 1
            else :
                Endnum = x-1    
                Startnum = Endnum - flag + 1
                # 如果 Startnum == Endnum 则说明只有一个数据
                if Startnum != Endnum :
                    num = addTime(X_thounsand,Startnum,Endnum)
                    print "-"*20
                    print "学号 : %d | %5s 分钟" %  ( int(X_thounsand[Endnum][0]) ,str(num/60))
                    flag = 1


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "Usage : python run.py xxx.xlsx"
        exit()

    filename = sys.argv[1]
    myqueue = dealExcle(filename)
    threads = []

    for i in range(30):
        t = threading.Thread(target=run,args=(myqueue,))
        t.start()
        threads.append(t)
    for t in threads:
        t.join()



# dt = "2016-05-05 20:28:54"
# timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
# timestamp = time.mktime(timeArray)



# from operator import itemgetter
# sorted(a,key=itemgetter(0))

# >>> from datetime import datetime
# >>> d1 = datetime(2017,11,14,11,30,20)
# >>> d2 = datetime(2017,11,14,17,20,11)
# >>> (d2-d1).seconds
# 20991


# mysql> create table student(
#     -> id char(10),
#     -> time char(25),
#     -> turn char(5));
0
0
查看评论

一个清华学生在香港留学受到的心灵震撼

一个清华学生在香港留学受到的心灵震撼98年本科毕业,又顺利地被保研,当时的我只是一个憨憨的书呆子,纯洁的如同高中生,在清华这种和尚庙一般的理工学校里呆了四年,女孩似乎是山下的老虎,神秘得让我一见就脸红心跳。未来是什么对于我就是“读完研再说”,反正成绩还行,不读白不读。天上掉了馅饼,用我的兄弟的话来说...
  • DaNmarner
  • DaNmarner
  • 2006-10-09 22:47
  • 5378

【动态规划】【USACO】Score Inflation

<br /> <br />The more points students score in our contests, the happier we here at the USACO are. We try to design our contests so t...
  • liveas
  • liveas
  • 2010-08-05 07:13
  • 1093

疯狂对列

疯狂队列 时间限制:1秒 空间限制:32768K 小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相...
  • chmy1992
  • chmy1992
  • 2017-08-12 20:18
  • 194

C++ 入门题现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。然后输出

#include #include using namespace std; int main() {     string a[100][6]; int n,b,c; cin>>n; for(b=1;b {    for(c=1;c  ...
  • ACM_e
  • ACM_e
  • 2016-10-17 16:55
  • 2488

网易笔试题-疯狂的队列

题目小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的...
  • u013616945
  • u013616945
  • 2017-08-31 18:11
  • 201

(c++)现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,

结构体来了...... #include using namespace std; struct student { string id; string name; int score1; int score2; int score3; }; void input(student *st...
  • sunxuelei9543
  • sunxuelei9543
  • 2017-01-22 18:02
  • 1883

学生宿舍分配方案优化

#Student Dorm Optimization import random import math dorms = ['Zeus','Athena','Hercules','Bacchus','Pluto'] p...
  • lihaitao000
  • lihaitao000
  • 2016-04-22 16:34
  • 682

编写一个函数print,打印一个学生的成绩数组,写一个函数input,用来输入5个学生的数据的记录

1、编写一个函数print,打印一个学生的成绩数组,该书组中有五个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score(3门课的成绩)、用主函数输入这些数据,用print函数输出这些记录。 2、编写一个函数input,用来输入5个学生的数据的记录。 #include st...
  • w3071206219
  • w3071206219
  • 2016-09-21 19:57
  • 6852

网易2017内推笔试题--小易老师的疯狂数列

小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列...
  • he_shuai20
  • he_shuai20
  • 2017-08-15 23:15
  • 1240

深度学习之三:深度学习基本思想

目录: 一、概述 二、背景 三、人脑视觉机理 四、关于特征        4.1、特征表示的粒度        4.2、初级(浅层)特征表示    ...
  • starzhou
  • starzhou
  • 2015-07-12 15:10
  • 697
    个人资料
    • 访问:44221次
    • 积分:1137
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:108篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论