从csv文件读取Python日期

时间:2014-10-20 08:31:20

标签: python datetime csv format

我实际上是在尝试从python 2.7.8中的csv文件计算SLA。 这是我的csv文件的一个例子:

2014-09-24 23:57:43;0000B169;20
2014-09-24 23:58:05;00012223;20
2014-09-24 23:58:49;00012200;20
2014-09-24 23:59:33;0000B0EA;21
2014-09-25 00:00:17;000121FF;21
2014-09-25 00:00:39;00012217;21
2014-09-25 00:01:01;00012176;20
2014-09-25 00:01:23;00012175;20

正如您所看到的,我的CSV文件有两天不同,我希望我的程序能够阅读它们并每天计算SLA。 这是我的计划:

#V1.1 du programme de Calcul du SLA
import csv
import datetime
with open("/home/maxime/Bureau/Dev/Exports/export2.csv", 'rb') as f:            #import the required modules
    reader = csv.reader(f, delimiter=';')
    count=0              #variable of the date "number"
    for row in reader:
    if row[0] !="Dispatch date":                # we don't want to include the first line of the first column
        date = datetime.datetime.strptime (row [0],"%Y-%m-%d %H:%M:%S")             #creating the datetime object with the string agrument
        if date < datetime.datetime.strptime ("2014-09-26 00:00:00", "%Y-%m-%d %H:%M:%S")and date > datetime.datetime.strptime ("2014-09-25 00:00:00", "%Y-%m-%d %H:%M:%S"):        #loop to calcul if the date is correct or not
        count = count+1                 #increment the date to perform the SLA calcul
    result = (count/3927.2)*100                 #SLA calcul
    print "Le fichier date du", date                #
    print "Le SLA est de :", result, "%"            #Display the SLA and the date of the file

我不知道如何正确使用python中的“datetime”函数,所以你可以帮我解决我的问题。

3 个答案:

答案 0 :(得分:6)

尝试使用名为“pandas”的模块阅读:

import pandas as pd
def importdict(filename):#creates a function to read the csv
    #create data frame from csv with pandas module
    df=pd.read_csv(filename+'.csv', names=['systemtime', 'Var1', 'var2'],sep=';',parse_dates=[0]) #or:, infer_datetime_format=True)
    fileDATES=df.T.to_dict().values()#export the data frame to a python dictionary
    return fileDATES #return the dictionary to work with it outside the function
if __name__ == '__main__':
    fileDATES = importdict('dates') #start the function with the name of the file

此函数返回一个字典,其中包含您可以使用的格式的所有列和数据。我在你的系统中命名了你的csv“日期”。创建dict后,您可以打印所需的信息或使用数据。

希望这可以帮助你,一周前我遇到了与你类似的问题。

答案 1 :(得分:3)

我找到了问题的解决方案,所以我在这里发帖。

#V1.2 du calcul de SLA
#Cette version est opérationnelle   
import csv                         #
from datetime import datetime           #import the librairies   
from collections import defaultdict     #

with open('/home/maxime/Bureau/Dev/Exports/export2.csv', 'rb') as fil:
    values = defaultdict(int)               #create a dict

    reader = csv.DictReader(fil, delimiter=';')         #read the csv file
    for row in reader:
        date = datetime.strptime(row['Dispatch date'], '%Y-%m-%d %H:%M:%S')     #datetime value in the right date format
        values[date.strftime('%Y-%m-%d')] += 1          #increment the date with a step of 1

    for date, value in sorted(values.items()):
        result = (value/ 3927.2) * 100          #Sla calcul with the theoritic number of line
        print 'Le fichier date du %s' % date        #SLA display
        print 'Le SLA est de : %d%%' % result

答案 2 :(得分:0)

如果同一天的数据在文件中分组,那么您可以使用itertools.groupby()来计算SLA:

#!/usr/bin/env python
import sys
from datetime import datetime
from itertools import groupby

for day, group in groupby(sys.stdin, key=lambda line: line.partition(' ')[0]):
    try:
        date = datetime.strptime(day, '%Y-%m-%d')
    except ValueError:
        pass # ignore
    else:
        count = sum(1 for _ in group)
        print('Le fichier date du {date:%Y-%m-%d}'.format(date=date))
        print('Le SLA est de {result:.2%}'.format(result=count / 3927.2))

示例:

$ python compute-daily-sla.py < export2.csv