如何将月份名称映射到月份编号,反之亦然?
我正在尝试创建一个函数,可以将月份数字转换为缩写月份名称或将缩写月份名称转换为月份数字。我认为这可能是一个常见问题,但我在网上找不到。
我正在考虑 calendar 模块。我发现要将月份数字转换为缩写月份名称,您只需执行 calendar.month_abbr[num]
即可。但我看不出有什么办法可以朝另一个方向走。创建一个字典来转换另一个方向是处理这个问题的最佳方法吗?或者是否有更好的方法从月份名称到月份编号,反之亦然?
I am trying to create a function that can convert a month number to an abbreviated month name or an abbreviated month name to a month number. I thought this might be a common question but I could not find it online.
I was thinking about the calendar module. I see that to convert from month number to abbreviated month name you can just do calendar.month_abbr[num]
. I do not see a way to go in the other direction though. Would creating a dictionary for converting the other direction be the best way to handle this? Or is there a better way to go from month name to month number and vice versa?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
使用
calendar
模块创建反向字典(与任何模块一样,您需要导入该字典):在 2.7 之前的 Python 版本中,由于该语言不支持字典理解语法,您将需要要做
Create a reverse dictionary using the
calendar
module (which, like any module, you will need to import):In Python versions before 2.7, due to dict comprehension syntax not being supported in the language, you would have to do
只是为了好玩:
Just for fun:
使用 日历 模块:
Number-to-Abbr
calendar.month_abbr[month_number]
缩写到数字
列表(calendar.month_abbr).index(month_abbr)
Using calendar module:
Number-to-Abbr
calendar.month_abbr[month_number]
Abbr-to-Number
list(calendar.month_abbr).index(month_abbr)
这是另一种方法。
Here's yet another way to do it.
信息来源:Python Docs
从月份获取月份数字名称使用日期时间模块
Information source: Python Docs
To get month number from month name use datetime module
这是一个更全面的方法,也可以接受完整的月份名称
示例:
Here is a more comprehensive method that can also accept full month names
example:
完整月份名称到月份编号(例如一月、二月等):
部分月份名称到月份编号(例如< em>一月、二月等..):
您还可以将其格式化为两位数表示形式:
月份数字到完整的月份名称(可以是双位数)数字表示与否,字符串或整数)(例如 '01'、1 等):
月份数字到部分月份名称(无论是否为两位数,字符串或整数)(例如 '01'、1 等):
Full month name to month number (e.g. January, February, etc..):
Partial month name to month number (e.g. Jan, Feb, etc..):
You can also format it to double-digits representation:
Month number to full month name (either double-digits representation or not, either string or int) (e.g. '01', 1, etc..):
Month number to partial month name (either double-digits representation or not, either string or int) (e.g. '01', 1, etc..):
再来一张:
One more:
要从月份编号获取完整的日历名称,您可以使用calendar.month_name。请参阅文档了解更多详细信息: https://docs.python.org/2/库/calendar.html
To get the full calendar name from the month number, you can use calendar.month_name. Please see the documentation for more details: https://docs.python.org/2/library/calendar.html
将月份名称转换为列表时,可以使用
index
方法。月份名称的索引将对应于月份的数字:这是
calendar.month_abbr[1]
的逆操作。When converting the month names to a list, you can use the
index
method. The index of the month name will correspond to the number of the month:This is the reverse operation of
calendar.month_abbr[1]
.使用
日期时间
:使用
时间
:Using
datetime
:Using
time
:你可以尝试:
You could try with:
基于上述想法,这对于将月份名称更改为适当的月份编号非常有效:
Building on ideas expressed above, This is effective for changing a month name to its appropriate month number:
您可以使用下面作为替代方案。
from time import strptime
strptime('Feb','%b').tm_mon
导入日历
calendar.month_abbr[2]
或日历.月份[2]
You can use below as an alternative.
from time import strptime
strptime('Feb','%b').tm_mon
import calendar
calendar.month_abbr[2]
orcalendar.month[2]
如果您不想导入日历库,并且需要更强大的东西 - 您可以使您的代码比其他一些解决方案对不一致的文本输入更加动态假如。您可以:
.items()
创建一个month_to_number
字典s
的小写字母是否在小写键k
。同样,如果您有一个列表
l
而不是字符串,则可以添加另一个for
来循环列表。我创建的列表具有不一致的值,但输出仍然是正确月份数字所需的:我这里的用例是我使用
Selenium
从网站中抓取数据根据某些条件自动选择下拉值。不管怎样,这需要我依赖一些我相信我们的供应商每月手动输入标题的数据,如果他们的格式与历史上的格式略有不同,我不想回到我的代码。If you don't want to import the calendar library, and need something that is a bit more robust -- you can make your code a little bit more dynamic to inconsistent text input than some of the other solutions provided. You can:
month_to_number
dictionary.items()
of that dictionary and check if the lowercase of a strings
is in a lowercase keyk
.Likewise, if you have a list
l
instead of a string, you can add anotherfor
to loop through the list. The list I have created has inconsistent values, but the output is still what would be desired for the correct month number:The use case for me here is that I am using
Selenium
to scrape data from a website by automatically selecting a dropdown value based off of some conditions. Anyway, this requires me relying on some data that I believe our vendor is manually entering to title each month, and I don't want to come back to my code if they format something slightly differently than they have done historically.