월 이름을 월 번호에 매핑하거나 그 반대의 경우는 어떻게 합니까?
저는 월 수를 약칭 월 수로, 약칭 월 수를 약칭 월 수로 변환할 수 있는 기능을 만들려고 합니다.저는 이것이 일반적인 질문일 것이라고 생각했지만 온라인에서 찾을 수 없었습니다.
저는 달력 모듈에 대해 생각하고 있었습니다.저는 월 번호에서 약식 월 이름으로 변환하기 위해 당신은 그냥 할 수 있습니다.calendar.month_abbr[num]
하지만 저는 다른 방향으로 갈 방법이 보이지 않습니다.다른 방향으로 변환하기 위한 사전을 만드는 것이 이것을 처리하는 가장 좋은 방법입니까?아니면 월 이름에서 월 번호로, 또는 그 반대로 가는 더 나은 방법이 있습니까?
다음을 사용하여 역방향 사전 만들기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)
그냥 재미로.
from time import strptime
strptime('Feb','%b').tm_mon
일정관리 모듈 사용:
숫자 대 Abbrcalendar.month_abbr[month_number]
Abbr-to-Numberlist(calendar.month_abbr).index(month_abbr)
또 다른 방법이 있습니다.
def 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]
정보 출처:파이썬 독스
월 이름에서 월 번호를 가져오려면 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')
다음은 전체 월 이름도 허용할 수 있는 보다 포괄적인 방법입니다.
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
하나 더:
def month_converter(month):
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
return months.index(month) + 1
전체 월 이름에서 월 번호(예: 1월, 2월 등)):
import datetime
month_name = 'January'
month_num = datetime.datetime.strptime(month_name, '%B').month
print(month_num, type(month_num))
>> 1 <class 'int'>
부분 월 이름에서 월 번호(예: Jan, Feb 등)):
import datetime
month_name = 'Feb'
month_num = datetime.datetime.strptime(month_name, '%b').month
print(month_num, type(month_num))
>> 2 <class 'int'>
두 자리 표시로 포맷할 수도 있습니다.
month_num = 3
formatted = f"{month_num:02}"
print(formatted, type(formatted))
>> 03 <class 'str'>
월 번호에서 전체 월 이름(두 자리 표시 또는 없음, 문자열 또는 int)(예: '01', 1 등)):
import datetime
month_num = '04' # month_num = 4 will work too
month_name = datetime.datetime(1, int(month_num), 1).strftime("%B")
print(month_name)
>> April
월 번호에서 부분 월 이름(두 자리 표시 또는 없음, 문자열 또는 int)(예: '01', 1 등)):
import datetime
month_num = 5 # month_num = '05' will work too
month_name = datetime.datetime(1, int(month_num), 1).strftime("%b")
print(month_name)
>> May
월 번호에서 전체 달력 이름을 가져오려면 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)
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)
다음을 사용할 수 있습니다.
pd.to_datetime(df['month'], format='%b').dt.month
위에서 설명한 아이디어를 바탕으로 월 이름을 적절한 월 번호로 변경하는 데 효과적입니다.
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
아래를 대안으로 사용할 수 있습니다.
- 월-월 번호:
from time import strptime
strptime('Feb','%b').tm_mon
- 월 번호 - 월:
import calendar
calendar.month_abbr[2]
또는calendar.month[2]
def month_num2abbr(month):
month = int(month)
import calendar
months_abbr = {month: index for index, month in enumerate(calendar.month_abbr) if month}
for abbr, month_num in months_abbr.items():
if month_num==month:
return abbr
return False
print(month_num2abbr(7))
달력 라이브러리를 가져오지 않고 좀 더 강력한 기능이 필요한 경우 제공된 다른 솔루션보다 일관성 없는 텍스트 입력에 코드를 조금 더 동적으로 만들 수 있습니다.할 수 있는 일:
- 성을 합니다.
month_to_number
- 을 순환시키다.
.items()
합니다.s
키 문자키 있에음에 .k
.
month_to_number = {
'January' : 1,
'February' : 2,
'March' : 3,
'April' : 4,
'May' : 5,
'June' : 6,
'July' : 7,
'August' : 8,
'September' : 9,
'October' : 10,
'November' : 11,
'December' : 12}
s = 'jun'
[v for k, v in month_to_number.items() if s.lower() in k.lower()][0]
Out[1]: 6
마찬가지로, 만약 당신이 목록을 가지고 있다면.l
다른 문자열을 할 수 .for
목록을 반복합니다.작성한 목록의 값이 일치하지 않지만 올바른 월 번호에 대해 원하는 값은 다음과 같습니다.
l = ['January', 'february', 'mar', 'Apr', 'MAY', 'JUne', 'july']
[v for k, v in month_to_number.items() for m in l if m.lower() in k.lower()]
Out[2]: [1, 2, 3, 4, 5, 6, 7]
가 사용하는 는 여서제사사사용례는는하기를 사용하는 입니다.Selenium
일부 조건을 기반으로 드롭다운 값을 자동으로 선택하여 웹 사이트에서 데이터를 삭제합니다.어쨌든 이를 위해서는 공급업체가 매월 제목을 수동으로 입력하는 데이터를 사용해야 하며, 공급업체가 과거와 약간 다른 형식으로 포맷하는 경우에는 코드로 돌아가고 싶지 않습니다.
언급URL : https://stackoverflow.com/questions/3418050/how-to-map-month-name-to-month-number-and-vice-versa
'programing' 카테고리의 다른 글
Javascript / jQuery를 통해 Android 전화기 탐지 (0) | 2023.08.14 |
---|---|
TypeScript를 사용하는 Angular2의 http 데이터에서 RxJS 관찰 가능한 항목 연결 (0) | 2023.08.14 |
여러 역할을 확인하는 데 사용하는 방법은 무엇입니까? (0) | 2023.08.14 |
도커의 MariaDB Galera 클러스터에서 "WSREP: SST failed: 1(조작이 허용되지 않음)"을 디버깅하는 방법은 무엇입니까? (0) | 2023.08.14 |
Xcode 4.4 오류 - 앱 실행을 기다리는 동안 시간 초과됨 (0) | 2023.08.14 |