2012-04-26 15 views
5

में मानव प्रारूप तिथि सीमाओं मैं, तार में, कुछ मानव शैली तिथि सीमाएँ हो जैसे निम्नलिखित:पार्स अजगर

22-24th April 2012 
14-23 July 
20th June - 5th July 

मैं अजगर में इन पार्स करने के लिए चाहते हैं, ताकि मैं दो datetime के साथ समाप्त कर सकते हैं वस्तुओं: शुरुआत के लिए एक, अंत के लिए एक।

क्या कोई मॉड्यूल है जो मुझे ऐसा करने देगा? मैंने parsedatetime की कोशिश की है, और ऐसा लगता है कि evalRange फ़ंक्शन ऐसा कर सकता है (दस्तावेज के लिए http://code-bear.com/code/parsedatetime/docs/index.html देखें), लेकिन ऐसा कुछ भी पार्स नहीं लगता है, और केवल वर्तमान दिनांक/समय दो बार देता है।

कोई विचार?

+1

रोबिन, imho - इन तार regex के और कस्टम तर्क की विविधता के साथ आपका सर्वश्रेष्ठ दांव हैं। -dc – dc5553

उत्तर

7

मैं जो मैं अब मुक्त-स्रोत बना है यह करने के लिए, एक पायथन मॉड्यूल लेखन समाप्त हो गया। यह Github पर डाउनलोड के लिए उपलब्ध है, वहाँ documentation है, और इसे का उपयोग PyPI से स्थापित किया जा सकता:

pip install daterangeparser 

जो लोग रुचि रखते हैं के लिए, एक पूर्ण पार्सर PyParsing, एक महान का उपयोग कर बनाने के द्वारा मॉड्यूल काम करता है (और उल्लेखनीय उपयोग में आसान) उपकरण।

+1

बहुत बढ़िया! धन्यवाद! –

2

आप dateutil.parser का उपयोग कर सकते हैं। लेकिन यह तिथि सीमाओं को संभाल नहीं करता है। आपको पहले नियमित अभिव्यक्ति लागू करने की आवश्यकता हो सकती है।

import dateutil.parser 
dateutil.parser.parse("20th June") 

रिटर्न datetime.datetime(2012, 6, 20, 0, 0)

सादर

0

पिछले जवाब के आधार पर, आप क्या कर सकता है:

  1. preprocess अपने इनपुट ताकि आप आरंभ और समाप्ति तिथि (उदाहरण के लिए: 20th June और 5th July) मिलता है। इस ['22', '24th'] वापस आ जाएगी (बस th और इसी तरह के ड्रॉप)
  2. dateutil.parser का उपयोग करने वालों की दिनांक से datetime वस्तुओं प्राप्त करें:: dateutil.parser.parse('22 July 2012')

यहाँ के एक कार्यान्वयन है अपना पहला उदाहरण (date_range == 22-24th July 2012) में आप कि date_range.split(' ')[0].split('-') का उपयोग करके ऐसा कर सकते हैं क्या पहले से था ने कहा:

import dateutil.parser 
date_range = '20-22th July 2013' 
date_range = date_range.lower() 
for suffix in {'th', 'rd', 'st'}: 
    date_range.replace(suffix, '') 
days = date_range.split(' ')[0].split('-') 
month_year = date_range.split(' ')[1] 
begin, end = days[0] + ' ' + month_year, days[1] + ' ' + month_year 
begin_date = dateutil.parser.parse(begin) 
end_date = dateutil.parser.parse(end)