import datetime
random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = []
for item in random_list:
try:
date = datetime.datetime.strptime(item, "%Y-%m-%d")
date_list.append(date)
except ValueError:
print("Not a valid date foramt")
print(date_list)
उपरोक्त कोड में, मैं मूल रूप से कुछ random_list
से गुजर रहा हूं और अगर मुझे एक स्ट्रिंग दिखाई देती है जो वैध दिनांक प्रारूप की है, तो मैं इसे date_list
नामक एक और सूची जोड़ना चाहता हूं।
मैं केवल उन स्ट्रिंग्स को जोड़ना चाहता हूं जो वैध दिनांक प्रारूप के हैं, जिसका अर्थ है कि यदि मुझे एक यादृच्छिक स्ट्रिंग "फू" दिखाई देती है, तो मैं इसे अनदेखा करना चाहता हूं और इसे date_list
में नहीं जोड़ना चाहता हूं।
मुझे लगता है कि इसे संभालने का सबसे अच्छा और सबसे पाइथोनिक तरीका क्या होगा?
आदर्श रूप से अगर कुछ बूलियन फ़ंक्शन थे जो मुझे बताएंगे कि क्या स्ट्रिंग जो मैं देख रहा हूं वह एक तारीख है तो मैं स्ट्रिंग को date_list
में जोड़ सकता हूं जब वे सत्यापन पर सही हो जाते हैं।
मैं कुछ विचारों को सही तरीके से पसंद करूंगा जिससे मैं इसे संभाल सकता हूं।
2 जवाब
यह करने का यह एक बहुत अच्छा तरीका है, आप इसे सूची समझ का उपयोग करके या filter
फ़ंक्शन का उपयोग करके कार्यान्वित कर सकते हैं
random_list = ["lol", "2020-10-05", "2020-09-11"]
def validate(date_text):
try: datetime.datetime.strptime(date_text, '%Y-%m-%d'); return True
except ValueError: return False
random_list = list(filter(validate, random_list))
print(random_list)
#or
[i for i in random_list if validate(i)]
दोनों आपको देंगे:
["2020-10-05", "2020-09-11"]
यदि आप के साथ फ़िल्टर . का उपयोग करने में आसान सूची बोध को रूपांतरित करना चाहते हैं
[datetime.datetime.strptime(i, '%Y-%m-%d') for i in list(filter(validate, random_list))]
[datetime.datetime(2020, 10, 5, 0, 0), datetime.datetime(2020, 9, 11, 0, 0)]
ठीक है, जैसा कि आप विशिष्ट प्रारूप YYYY-MM-DD का उपयोग कर रहे हैं, आप इसे नियमित रूप से नियमित अभिव्यक्तियों के माध्यम से कर सकते हैं। कुछ इस तरह:
import re
import datetime
rDate = re.compile(r'^\d\d\d\d-\d\d-\d\d$')
isDate = lambda d: rDate.match(d)
toDate = lambda d: datetime.datetime.strptime(d, "%Y-%m-%d")
random_list = ["lol", "2020-10-05", "2020-09-11"]
date_list = list(map(toDate, filter(isDate, random_list)))
print(date_list)
मुझे यह परिणाम मिलता है:
$ /bin/python ./dates.py
[datetime.datetime(2020, 10, 5, 0, 0), datetime.datetime(2020, 9, 11, 0, 0)]
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।