使用Python从csv文件中读取特定日期范围

时间:2014-01-28 03:02:57

标签: python regex python-2.7

我有一个csv文件,其格式超过6000万条,

2013-07-23 17:04:34, some data, some more data   

我想编写一个Python脚本,允许用户以“2013-04-23”和“2013-04-25”格式输入“To”和“From”日期。然后我想搜索该范围内的所有记录并显示它们。

我在Windows 7机器上使用Python 2.7(使用Eclipse开发),但完成后,此脚本将在Linux Red Hat服务器上运行。

所以,我所拥有的缩小版本是:

if __name__ == '__main__':
    from_date = raw_input('\nEnter FROM Date (e.g. 2013-11-29) :')
    from_date += ' 00:00:00'
    print('From date: = ' + from_date)
    to_date = raw_input('\nEnter TO Date (e.g. 2013-11-30) :')
    to_date += ' 23:59:59'

    in_file = './file.csv'
    for line in in_file:
        fields = line.split(',')
        found_from_date = re.match(from_date, fields[0])
        if found_from_date:
            found_to_date = re.match(to_date, fields[0])
            if found_to_date:
                print(line)

    in_file.close()

正如您所看到的,我目前正在使用正则表达式,但这当然意味着我只选择完全匹配。我当然可以编写一些代码来分割每个日期字段并匹配每个字段,但我希望我可以使用一些日期范围函数。

我做了一些Googleing并遇到了一些名为pandas的东西,但在下载和学习之前我只是想确保没有更标准/更容易的东西,并且可以使用Red Hat包更新管理器。

任何建议都将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:3)

datetime模块是您的朋友,看看它是如何构建比较日期的功能的。我不记得是否有一个方法接受预先格式化的字符串并将其转换为datetime.date,但它足够简单来解析该位:

import datetime

if __name__ == '__main__':
    from_raw = raw_input('\nEnter FROM Date (e.g. 2013-11-29) :')
    from_date = datetime.date(*map(int, from_raw.split('-')))
    print 'From date: = ' + str(from_date)
    to_raw = raw_input('\nEnter TO Date (e.g. 2013-11-30) :')
    to_date = datetime.date(*map(int, to_raw.split('-')))

    in_file = './file.csv'
    for line in in_file:
        fields = line.split(',')
        found_date = datetime.date(*map(int, fields[0].split(' ')[0].split('-')))
        if from_date <= found_date <= to_date:
            print line

    in_file.close()

答案 1 :(得分:1)

看看dateutil。 http://labix.org/python-dateutil 或许rrule.between(之后,之前,inc = False)是你之后的目标吗?