महीने का नाम महीने की संख्या और अजगर में इसके विपरीत


95

मैं एक ऐसा फंक्शन बनाने की कोशिश कर रहा हूं जो एक महीने की संख्या को संक्षिप्त महीने के नाम या एक संक्षिप्त महीने के नाम को एक महीने की संख्या में बदल सके। मैंने सोचा कि यह एक सामान्य प्रश्न हो सकता है लेकिन मैं इसे ऑनलाइन नहीं पा सकता हूं।

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

जवाबों:


97

calendarमॉड्यूल का उपयोग करके एक रिवर्स शब्दकोश बनाएं (जो, किसी भी मॉड्यूल की तरह, आपको आयात करने की आवश्यकता होगी):

{month: index for index, month in enumerate(calendar.month_abbr) if month}

2.7 से पहले पायथन संस्करणों में, भाषा में तानाशाही समझदार वाक्य रचना का समर्थन नहीं करने के कारण, आपको करना होगा

dict((month, index) for index, month in enumerate(calendar.month_abbr) if month)

76

सिर्फ मनोरंजन के लिए:

from time import strptime

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

3
क्या यह आपके स्थान पर निर्भर करता है?
— Janus Troelsen

पायथन 2.7 | ValueError: समय डेटा 'Fev' प्रारूप '% b' से मेल नहीं खाता है
— डिएगो विनीसस

@ डिएगोविंसियस को पूरा यकीन है कि 'फेव' को वहां 'फरवरी' माना जाता है।
— फवाज युसरन

@FawwazYusran डिएगो ने स्थानीय भाषा की कोशिश की, लेकिन कमांड केवल अंग्रेजी भाषा के महीने के नामों के लिए काम कर रही है
— पायथोनिक

यह बहुत अयोग्य है अगर एक लूप में उपयोग किया जाता है।
— श्री लांस ई स्लोन

55

कैलेंडर मॉड्यूल का उपयोग करना :

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

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


उदाहरण: सूची (Calendar.month_abbr) .index ('फ़रवरी') परिणाम: 2
— kibitzforu

पूरे महीने के नाम उपयोग के लिए:list(calendar.month_name).index('January')
— पॉल

बुरा नहीं है, लेकिन बहुत कुशल नहीं है अगर एक लूप में उपयोग किया जाता है तो कई महीनों के नाम देखने के लिए।
— श्री लांस ई स्लोन

22

यहाँ यह करने का एक और तरीका है।

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]

आप इस तरह से एक ही काम कर सकते हैं: month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13)))और फिरmonth_cal[shortMonth]
— मैट डब्ल्यू।

3
यह एक अच्छा तरीका है। जिस तरह से मैंने सुझाव दिया है उसे आयात विवरण की आवश्यकता नहीं है। यह वरीयता की बात है।
— Gi0rgi0s

20

सूचना स्रोत: अजगर डॉक्स

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

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')

15

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

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

यह मेरे ऊपर से बेहतर है
— Gi0rgi0s


0

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

from time import strptime
monthWord = 'september'

newWord = monthWord [0].upper() + monthWord [1:3].lower() 
# converted to "Sep"

print(strptime(newWord,'%b').tm_mon) 
# "Sep" converted to "9" by strptime

शायद मैं गलत समझ रहा हूं कि आप क्या कर रहे हैं, लेकिन क्या आपको यकीन है कि यह शब्द [0: 3] नहीं होना चाहिए?
— छद्मोकू

नहीं, यदि आप फिर से देखते हैं तो आप देखेंगे कि पहला अक्षर शब्द [0] अपरकेस में इस्तेमाल किया गया है और इसे अगले दो अक्षरों, शब्द [1: 3] में लिखा गया है। मैंने जो कोड पोस्ट किया है, वह महीने के शब्दों को उनके उपयुक्त महीने की संख्या में बदलने में वास्तव में अच्छी तरह से काम करता है।
— थिसकोप

0

माह संख्या से पूर्ण कैलेंडर नाम प्राप्त करने के लिए, आप Calendar.month_name का उपयोग कर सकते हैं। कृपया अधिक जानकारी के लिए प्रलेखन देखें: https://docs.python.org/2/library/calendar.html

month_no = 1
month = calendar.month_name[month_no]

# month provides "January":
print(month)



-1
form month name to number
d=['JAN','FEB','MAR','April','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']
N=input()
for i in range(len(d)):
    if d[i] == N:
        month=(i+1)
print(month)

अपने कोडिंग की व्याख्या करना हमेशा बेहतर होता है
— बद्रो नियामी

-1

आप नीचे विकल्प के रूप में उपयोग कर सकते हैं।

  1. महीने से महीने की संख्या:

from time import strptime

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

  1. महीने की संख्या:

import calendar

calendar.month_abbr[2] या calendar.month[2]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.