0

@SOF

在我的 csv 文件中,如下所示,我正在尝试编写一些代码来循环并找到最后一个唯一类(唯一类基于元素 0 和元素 1 合并在一起)在我的示例中,最后一个唯一类是:Class02CD1将等于:Class02CD1

然后,它需要查看该唯一班级中学生的元素 4(在此示例中,只有 2 个学生,如果其中任何一个学生中存在一个数字,那么它需要从元素 2 获取时间并将其与当前时间,如果当前时间在给定时间之后 30 分钟或更长时间,则应打印“迟到”一词

CSV 文件

uniq1,uniq2,three,four,five,six
Class01,CD2,data,data,,data
Class01,CD2,data,data,22,data
Class01,CD2,data,data,,data
Class01,CD2,data,data,4,data
Class02,CD3,data,data,,data
Class02,CD3,data,data,,data
Class02,CD3,data,data,,data
Class02,CD3,data,data,,data
Class02,CD3,data,data,,data
Class02,CD3,data,data,3,data
Class02,CD3,data,data,,data
DClass2,DE2,data,data,133,data
DClass2,DE2,data,data,24,data
Class02,CD1,13:01,data,,data
Class02,CD1,13:05,data,1,data
  • 循环遍历独特元素以找到最后一个类。
  • 检查该唯一类中是否存在数字。
  • 如果数字存在,那么它应该从元素 2 获取时间
  • 如果数字存在并且我们有时间,那么我们应该将它与当前时间进行比较。
  • 如果当前时间是 30 分钟或在上一堂课的时间之后,那么它应该打印“迟到”,否则什么也不做。

任何人都知道如何解决这个问题,我完全迷失了,不知道如何做到这一点。

印刷

Class02CD1
Current: 2013-11-11 12:07:37.635000
Fetched: 2013-11-11 13:05:00
Calculated: 1382.61666667
late
4

2 回答 2

1

这是最后时间比较部分的答案。

import csv

dict = {}
key = False
with open('test.csv', mode='r') as infile:
    reader = csv.reader(infile,)
    first = False
    for row in reader:
        if first:
            first = True
            continue
        key = row[0]+row[1]
        if key in dict:
            dict[key].append(row)
        else: 
            dict[key] = [row]
    print dict

if(key):
    for row in dict[key]:
        # do time comparison
        pass
于 2013-11-10T21:19:29.190 回答
1

首先遍历文件并找出最后一行的类,然后再次遍历文件,现在如果给定行上的类名等于存储的类名,那么在那里应用你的条件并使用datetime模块来找出时间不同之处。

from datetime import datetime
import csv
import time
with open('abc1') as f:
    reader = csv.reader(f, delimiter=',')
    for line in reader:
        pass
    class_name = ''.join(line[:2]) #save the name on last line
    print class_name
    f.seek(0)           # Rest the file pointer t o the start of the file
    for line in reader:
        cls_name = ''.join(line[:2])
        if cls_name == class_name:
            if line[-2]:
                current_dtime = datetime.now()
                fetched_time = datetime.strptime(line[2], '%H:%M')
                fetched_time = datetime(year=current_dtime.year,
                                        month = current_dtime.month,
                                        day = current_dtime.day,
                                        hour = fetched_time.hour,
                                        minute = fetched_time.minute
                                        )
                if ((current_dtime - fetched_time).seconds/ 60.0) > 30.0:
                    print "late"
于 2013-11-10T21:32:16.780 回答