2014-01-28 1 views
1

를 사용나는 사용자가 넣을 수있는 파이썬 스크립트를 작성하려면, 나는 형식으로 그것에 만 60 개 이상의 레코드가 CSV 파일을 가지고 파이썬

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

를 CSV 파일에서 특정 날짜 범위를 읽고 '2013-04-23'및 '2013-04-25'형식의 'To'및 'From'날짜 그런 다음 해당 범위 내의 모든 레코드를 검색하여 표시하려고합니다.

필자는 Windows 7 컴퓨터 (Eclipse를 사용하여 개발 중)에서 Python 2.7을 사용하고 있지만 완료되면이 스크립트는 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 패키지 관리자를 사용하여 업데이트 할 수 있습니다.

모든 조언을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

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

고맙습니다. 귀하의 제안을 사용하여 작동하도록했는데 found_date에 대해 이렇게했습니다 : file_date = datetime.datetime.strptime (fields [0], "% Y- % m- % d % H : % M : % S")'. 유일한 단점은 천천히 실행된다는 것입니다 - 65 000 000 레코드를 처리하는 데 22 분이 걸리지 만 작동합니다. 도와 줘서 고마워. – Bruce

+0

@Bruce 나는'strptime'을 살펴 봤는데 적어도 내 시스템에서는'datetime.date'보다 5 ~ 6 배 정도 느린 속도로 실행되는 것처럼 보입니다 - 시간을 잃어 버렸지 만 샘플 코드에 기반하여 그것이 중요하다고 생각하지 마십시오. 타임 스탬프의 시간 부분을 파싱하도록 내 대답을 업데이트했다 (처음으로 주위를 알아 차리지 못했다), 나는 그것이 전혀 도움이되는지보기에 흥미가 있었다. –

+0

당신은 챔피언입니다. 속도는 급격히 올라갔습니다. 같은 양의 기록이 4 분 32 초 만에 완성되었습니다. 문제 해결됨! – Bruce

1

dateutil을 살펴보십시오. http://labix.org/python-dateutil 아마도 rrule.between (이후, 이전, inc = False)가 후속 작업입니까?

+0

감사 르기, 거기에 몇 가지 유용한 정보를. – Bruce

관련 문제