मैं "बंदर 2010-07-10 प्यार केला" जैसे तार से तारीख कैसे निकाल सकता हूं? धन्यवाद!
जवाबों:
यदि तारीख निश्चित रूप में दी गई है, तो आप तारीख निकालने के लिए बस तारीख निकालने के लिए एक नियमित अभिव्यक्ति और "datetime.datetime.strptime" का उपयोग कर सकते हैं:
import re
from datetime import datetime
match = re.search(r'\d{4}-\d{2}-\d{2}', text)
date = datetime.strptime(match.group(), '%Y-%m-%d').date()
अन्यथा, यदि तिथि एक मनमाने रूप में दी जाती है, तो आप इसे आसानी से नहीं निकाल सकते।
reमॉड्यूल को संदर्भित करता है , अर्थात import re।
from datetime import datetimeइसके बजाय की जरूरत हैimport datetime
अजगर-खजूर का उपयोग :
In [1]: import dateutil.parser as dparser
In [18]: dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
Out[18]: datetime.datetime(2010, 7, 10, 0, 0)
अमान्य तिथियां ValueError:
In [19]: dparser.parse("monkey 2010-07-32 love banana",fuzzy=True)
# ValueError: day is out of range for month
यह कई स्वरूपों में तिथियों को पहचान सकता है:
In [20]: dparser.parse("monkey 20/01/1980 love banana",fuzzy=True)
Out[20]: datetime.datetime(1980, 1, 20, 0, 0)
ध्यान दें कि यह अनुमान लगाता है कि क्या तारीख अस्पष्ट है:
In [23]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True)
Out[23]: datetime.datetime(1980, 10, 1, 0, 0)
लेकिन जिस तरह से यह अस्पष्ट तिथियों को पार करता है वह अनुकूलन योग्य है:
In [21]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True, dayfirst=True)
Out[21]: datetime.datetime(1980, 1, 10, 0, 0)
"monkey 10/01/1980 love 7/10/2010 banana"), यह एक वैल्यूअर को बढ़ा सकता है, या (जैसा भी "monkey 10/01/1980 love 2010-07-10 banana"हो) दूसरी तारीख को घंटे, मिनट, सेकंड या टाइमज़ोन को दर्शाते हुए गलत व्याख्या कर सकता है। fuzzy=Trueयह अनुमान लगाने का लाइसेंस देता है।
parseफ़ंक्शन एक अपवाद को बढ़ा सकता है (भले ही fuzzy=True), या इसके साथ fuzzy=True, यह पहली तारीख या दोनों तिथियों के कुछ हिस्सों से बना एक मैश-मैश वापस कर सकता है। तो वास्तव में, parseकेवल एक तार युक्त होना चाहिए जिसमें एक तिथि हो।
अजगर में एक स्ट्रिंग से तारीख निकालने के लिए; उपलब्ध सबसे अच्छा मॉड्यूल डेटफाइंडर मॉड्यूल है।
आप नीचे दिए गए आसान चरणों का पालन करके अपने पायथन प्रोजेक्ट में इसका उपयोग कर सकते हैं।
pip install datefinder
import datefinder
input_string = "monkey 2010-07-10 love banana"
# a generator will be returned by the datefinder module. I'm typecasting it to a list. Please read the note of caution provided at the bottom.
matches = list(datefinder.find_dates(input_string))
if len(matches) > 0:
# date returned will be a datetime.datetime object. here we are only using the first match.
date = matches[0]
print date
else:
print 'No dates found'
नोट: यदि आप बड़ी संख्या में मैचों की उम्मीद कर रहे हैं; फिर सूची में टाइपकास्ट करना अनुशंसित तरीका नहीं होगा क्योंकि यह एक बड़ा प्रदर्शन ओवरहेड होगा।
datefinderएक अस्पष्ट माध्यम से python-dateutilकेवल दो संभावित तिथियों को वापस करने से बेहतर अस्पष्ट मिलान तिथि प्रदान की गई। ब्लॉग पोस्ट पांच के विपरीत। यह निश्चित नहीं है कि यह अलग-अलग स्थानों को कैसे संभालता है ...
string = "Assessment Date: 17-May-2017 at 13:31" list(datefinder.find_dates(string.lower())) #[] string = "Assessment Date 17-May-2017 at 13:31" list(datefinder.find_dates(string.lower())) #[datetime.datetime(2017, 5, 17, 13, 31)]
Pyrorok का उपयोग करके, आप अमूर्त एक्सटेंशन को रेगुलर एक्सप्रेशन सिंटैक्स में परिभाषित कर सकते हैं।
कस्टम पैटर्न आपके regex को प्रारूप में शामिल किया जा सकता है %{PATTERN_NAME}।
आप उस पैटर्न के लिए एक लेबल भी बना सकते हैं, एक कोलन के साथ अलग करके %s{PATTERN_NAME:matched_string}:। यदि पैटर्न मेल खाता है, तो परिणामी शब्दकोश के भाग के रूप में मान लौटाया जाएगा (जैसे result.get('matched_string'))
उदाहरण के लिए:
from pygrok import Grok
input_string = 'monkey 2010-07-10 love banana'
date_pattern = '%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day}'
grok = Grok(date_pattern)
print(grok.match(input_string))
परिणामी मूल्य एक शब्दकोश होगा:
{'month': '07', 'day': '10', 'year': '2010'}
यदि input_string में date_pattern मौजूद नहीं है, तो रिटर्न वैल्यू होगी None। इसके विपरीत, यदि आपके पैटर्न में कोई लेबल नहीं है, तो यह एक खाली शब्दकोश लौटाएगा{}
संदर्भ:
आप डेटाप्रेसर मॉड्यूल को भी आज़मा सकते हैं , जो मुफ़्त टेक्स्ट पर डेटफ़ाइंडर की तुलना में धीमा हो सकता है, लेकिन जिसमें अधिक संभावित मामलों और दिनांक स्वरूपों को कवर करना चाहिए, साथ ही साथ भाषाओं की एक महत्वपूर्ण संख्या भी होनी चाहिए।
यदि आप स्ट्रिंग में दिनांक ऑब्जेक्ट की स्थिति जानते हैं (उदाहरण के लिए एक लॉग फ़ाइल में), तो आप पूरी तरह से प्रारूप को जाने बिना दिनांक को निकालने के लिए .split () [सूचकांक] का उपयोग कर सकते हैं।
उदाहरण के लिए:
>>> string = 'monkey 2010-07-10 love banana'
>>> date = string.split()[1]
>>> date
'2010-07-10'