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 में जोड़ सकता हूं जब वे सत्यापन पर सही हो जाते हैं।

मैं कुछ विचारों को सही तरीके से पसंद करूंगा जिससे मैं इसे संभाल सकता हूं।

0
Dinero 27 अक्टूबर 2020, 23:22

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)]
1
Ironkey 27 अक्टूबर 2020, 23:37

ठीक है, जैसा कि आप विशिष्ट प्रारूप 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)]
1
F1Rumors 27 अक्टूबर 2020, 23:41