我有一个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包更新管理器。
任何建议都将不胜感激。
提前致谢。
答案 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)是你之后的目标吗?