簡體   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