472,146 Members | 1,422 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,146 software developers and data experts.

Figure out month number from month abbrievation

Hello --
I'm parsing the output of the finger command, and was wondering
something...If I'm given a month abbrievation (such as "Jan"), what's
the best way to figure out the month number? I see that there's
something called "month_abbr" in the calendar module. However, when I
try to do calendar.month_abbr.index("Jan"), I get "_localized_month
instance has no attribute 'index'." So it seems that month_abbr isn't
a regular list. I'm currently doing it this way:

def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?
Thanks -- Bill.

Apr 12 '06 #1
10 7209
"Bill" wrote:
I'm parsing the output of the finger command, and was wondering
something...If I'm given a month abbrievation (such as "Jan"), what's
the best way to figure out the month number? I see that there's
something called "month_abbr" in the calendar module. However, when I
try to do calendar.month_abbr.index("Jan"), I get "_localized_month
instance has no attribute 'index'." So it seems that month_abbr isn't
a regular list. I'm currently doing it this way:

def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?


a couple of things, I think.

.... first, you can use list(seq) to convert any sequence to a list object,
so you could do

return list(calendar.month_abbr).index(monthabbr)

if you prefer to do things in one line.
.... but it also looks as if the meaning of the word "localized" isn't clear to
you; if you changed the locale, those names will be translated:
list(calendar.month_abbr)

['', 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec']

which will cause your finger program to break...

.... and I'm quite sure that you could have written down the abbreviations
in far less time than it took you to compose that mail ;-)

MONTHS = ['',
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
]

month_number = MONTHS.index

</F>

Apr 12 '06 #2
Bill wrote:
Hello --
I'm parsing the output of the finger command, and was wondering
something...If I'm given a month abbrievation (such as "Jan"), what's
the best way to figure out the month number? I see that there's
something called "month_abbr" in the calendar module. However, when I
try to do calendar.month_abbr.index("Jan"), I get "_localized_month
instance has no attribute 'index'." So it seems that month_abbr isn't
a regular list. I'm currently doing it this way:

def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?
Thanks -- Bill.


well, you can define the equivalent of your function with

month_number = list(calendar.month_abbr).index

or else

"! Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split().index
Apr 12 '06 #3
On 12 Apr 2006 13:20:28 -0700, rumours say that "Bill"
<fo**********@ftml.net> might have written:
Hello --
I'm parsing the output of the finger command, and was wondering
something...If I'm given a month abbrievation (such as "Jan"), what's
the best way to figure out the month number?


Try

import time
help(time.strftime)

and then this *might* work for you:

month_as_string= "Jan"
time.strptime(month_as_string, "%b").tm_mon

"Localization" (as Fredrik also suggested) is the reason for the *might* in
my previous sentence.
--
TZOTZIOY, I speak England very best.
"Dear Paul,
please stop spamming us."
The Corinthians
Apr 12 '06 #4
Bill wrote:
def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?
Thanks -- Bill.


I'm curious, does that really work, or is there a problem with the first
index being 0? Or is that avoided somehow?
Apr 12 '06 #5
On 13/04/2006 7:02 AM, John Salerno wrote:
Bill wrote:
def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?
Thanks -- Bill.


I'm curious, does that really work, or is there a problem with the first
index being 0? Or is that avoided somehow?


Yes, No, Yes.

You can answer such questions yourself very easily, e.g. in this case:
import calendar
calendar.month_abbr <calendar._localized_month instance at 0x00AE84E0> list(calendar.month_abbr)

['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec']
Apr 12 '06 #6
John Salerno wrote:
Bill wrote:
def month_number(monthabbr):
"""Return the month number for monthabbr; e.g. "Jan" -> 1."""
for index, day in enumerate(calendar.month_abbr):
if day == monthabbr:
return index

which works well enough but isn't very clever. I'm pretty new to
Python; what am I missing here?
Thanks -- Bill.


I'm curious, does that really work, or is there a problem with the first
index being 0? Or is that avoided somehow?


you don't have a python shell always at hand for such cases of curiosity ?

import calendar
tuple(calendar.month_abbr)

('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec')
Apr 12 '06 #7
John Machin wrote:
You can answer such questions yourself very easily, e.g. in this case:
>>> import calendar
>>> calendar.month_abbr <calendar._localized_month instance at 0x00AE84E0> >>> list(calendar.month_abbr)

['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec']


Ah thanks. I did try it first, but I didn't know to cast it to a list,
so I was just getting the object.
Apr 12 '06 #8
Alle 04:41, giovedì 13 aprile 2006, Fredrik Lundh ha scritto:
but it also looks as if the meaning of the word "localized" isn't clear to
you; if you changed the locale, those names will be translated


Mine behave strangely. Linux localized for Italian, but Python (or its
calander is in english)

??
F
Apr 13 '06 #9
"Fulvio" wrote:
but it also looks as if the meaning of the word "localized" isn't clear to
you; if you changed the locale, those names will be translated


Mine behave strangely. Linux localized for Italian, but Python (or its
calander is in english)


Python defaults to the C locale, which is a minimal english locale. To change this,
you have to tell the locale module
import locale
locale.setlocale(locale.LC_ALL) 'C' import calendar
list(calendar.month_abbr) ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
locale.setlocale(locale.LC_ALL, "") # get locale from environment 'sv_SE' list(calendar.month_abbr) ['', 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec']
locale.setlocale(locale.LC_ALL, "it_IT") # use explicit locale 'it_IT' list(calendar.month_abbr) ['', 'gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic']

The point here is that this is a global setting; once you (or someone using your code)
change the locale, all locale dependent code changes behaviour.
import locale, string
print string.uppercase ABCDEFGHIJKLMNOPQRSTUVWXYZ locale.setlocale(locale.LC_ALL, "it_IT") 'it_IT' print string.uppercase

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ

</F>

Apr 13 '06 #10
Alle 20:16, giovedì 13 aprile 2006, Fredrik Lundh ha scritto:
locale.setlocale(locale.LC_ALL, "it_IT")


'it_IT'


Thank you
Great & kind explanation

F
Apr 13 '06 #11

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by developer | last post: by
4 posts views Thread by Ronald Celis | last post: by
6 posts views Thread by Ashish Sheth | last post: by
6 posts views Thread by Ante Perkovic | last post: by
5 posts views Thread by Seb | last post: by
reply views Thread by Saiars | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.