繁体   English   中英

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

[英]Read specific date range from csv file using Python

我有一个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软件包管理器进行更新。

任何建议将不胜感激。

提前致谢。

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()

看看dateutil。 http://labix.org/python-dateutil也许rrule.between(after,before,inc = False)是您追求的?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM