2010-08-05 13 views
48

मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो एक महीने का नंबर संक्षिप्त नाम या एक संक्षिप्त महीने का नाम एक महीने संख्या में परिवर्तित कर सके। मैंने सोचा कि यह एक आम सवाल हो सकता है लेकिन मुझे इसे ऑनलाइन नहीं मिला।महीने का नाम महीना संख्या और इसके विपरीत पायथन

मैं calendar मॉड्यूल के बारे में सोच रहा था। मैं देखता हूं कि महीने से लेकर संक्षिप्त महीने के नाम में कनवर्ट करने के लिए आप केवल calendar.month_abbr[num] कर सकते हैं। हालांकि मुझे दूसरी दिशा में जाने का कोई रास्ता नहीं दिख रहा है। दूसरी दिशा को बदलने के लिए एक शब्दकोश बनाना चाहते हैं इसे संभालने का सबसे अच्छा तरीका है? या क्या महीने के नाम से महीने की संख्या में जाने का बेहतर तरीका है और इसके विपरीत?

उत्तर

47

एक रिवर्स शब्दकोश बनाना, यह करने के लिए एक उचित तरीका होगा क्योंकि यह बहुत सरल है:

{v: k for k,v in enumerate(calendar.month_abbr)} 
+0

इस नहीं है किसी कारण से मेरे लिए काम कर, >>> d = dict (V, कश्मीर के लिए कश्मीर, calendar.month_abbr में v) फ़ाइल "", लाइन 1 सिंटैक्स त्रुटि : जनरेटर अभिव्यक्ति को संश्लेषित किया जाना चाहिए यदि एकमात्र तर्क –

+1

हम्म, मैंने यह किया और यह काम किया ... डी = dict ((v, k) के लिए v, v में enumerate (calendar.month_abbr)) –

+0

@Mark_Masoul: किस संस्करण का संस्करण अजगर? बहुत पुराना लग रहा है। –

51
:

import calendar 
dict((v,k) for k,v in enumerate(calendar.month_abbr)) 

या अजगर के हाल के संस्करणों में (2.7+), जो समझ शब्दकोश का समर्थन

बस मस्ती के लिए:

from time import strptime 

strptime('Feb','%b').tm_mon 
+0

क्या यह आपके लोकेल पर निर्भर करता है? –

+0

यह मेरे मामले में धन्यवाद काम कर रहा है –

11

यहाँ अभी तक एक और तरीका यह करने के लिए है।

monthToNum(shortMonth): 

return{ 
     'Jan' : 1, 
     'Feb' : 2, 
     'Mar' : 3, 
     'Apr' : 4, 
     'May' : 5, 
     'Jun' : 6, 
     'Jul' : 7, 
     'Aug' : 8, 
     'Sep' : 9, 
     'Oct' : 10, 
     'Nov' : 11, 
     'Dec' : 12 
}[shortMonth] 
27

का उपयोग calendar मॉड्यूल:

संख्या-टू-Abbr calendar.month_abbr[month_number]

Abbr करने वाली संख्या list(calendar.month_abbr).index(month_abbr)

5

एक और:

def month_converter(month): 
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
    return months.index(month) + 1 
9

उसके ई एक अधिक व्यापक विधि भी पूरे महीने नामों

स्वीकार कर सकते हैं है
def month_string_to_number(string): 
    m = { 
     'jan': 1, 
     'feb': 2, 
     'mar': 3, 
     'apr':4, 
     'may':5, 
     'jun':6, 
     'jul':7, 
     'aug':8, 
     'sep':9, 
     'oct':10, 
     'nov':11, 
     'dec':12 
     } 
    s = string.strip()[:3].lower() 

    try: 
     out = m[s] 
     return out 
    except: 
     raise ValueError('Not a month') 

उदाहरण:

>>> month_string_to_number("October") 
10 
>>> month_string_to_number("oct") 
10 
0

महीने नंबर का उपयोग कर महीने के नाम पाने के लिए, आप उपयोग कर सकते time:

import time 

mn = 11 
print time.strftime('%B', time.struct_time((0, mn, 0,)+(0,)*6)) 

'November' 
3

सूचना स्रोत: Python Docs

महीने संख्या प्राप्त करने के लिए मीटर माह नाम उपयोग datetime मॉड्यूल

import datetime 
month_number = datetime.datetime.strptime(month_name, '%b').month 

# To get month name 
In [2]: datetime.datetime.strftime(datetime.datetime.now(), '%a %b %d, %Y') 
Out [2]: 'Thu Aug 10, 2017' 

# To get just the month name, %b gives abbrevated form, %B gives full month name 
# %b => Jan 
# %B => January 
dateteime.datetime.strftime(datetime_object, '%b') 
संबंधित मुद्दे