首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python将字符串中的子字符串更改为字典中的对应项

问使用Python将字符串中的子字符串更改为字典中的对应项
EN

Stack Overflow用户
提问于 2021-06-02 08:32:32
回答 4查看 58关注 0票数 0

我得到了一根类似于“2021年1月29日”的绳子。我想转换瑞典子字符串“jan”。对应的英文月份名称,在本例中为" Jan“,其结果将是”2021年1月29日“。然后,我可以使用这个字符串将其转换为date对象。

我有一个字典,它有一个键:value和瑞典键名,相应的英文月名作为值:

代码语言:javascript
复制
monthNameDictionary = {
    "jan.": "Jan",
    "feb.": "Feb",
    "mars": "Mar",
    "apr.": "Apr",
    "maj": "May",
    "juni": "Jun",
    "juli": "Jul",
    "aug.": "Aug",
    "sep.": "Sep",
    "okt.": "Oct",
    "nov.": "Nov",
    "dec.": "Dec",
}

如何使用此方法或其他方式将字符串转换为具有英文月份名称的字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-06-02 08:39:32

为了完整起见:如果您真的想替换字符串,请使用此方法(假设要替换的每个字符串最多只出现一次):

代码语言:javascript
复制
monthDict = {
    "jan.": "Jan",
    "feb.": "Feb",
    "mars": "Mar",
    "apr.": "Apr",
    "maj": "May",
    "juni": "Jun",
    "juli": "Jul",
    "aug.": "Aug",
    "sep.": "Sep",
    "okt.": "Oct",
    "nov.": "Nov",
    "dec.": "Dec",
}
inStr = "29 jan. 2021"
for month in monthDict: # iterating directly over a dict iterates over it's keys
    inStr = inStr.replace(month, monthDict[month])
print(inStr)

编辑:如果同一个单词多次出现,请使用inStr = re.sub(month, monthDict, inStr)。

票数 1
EN

Stack Overflow用户

发布于 2021-06-02 08:38:14

这应该能行,

代码语言:javascript
复制
>>> monthNameDictionary = {
    "jan.": "Jan",
    "feb.": "Feb",
    "mars": "Mar",
    "apr.": "Apr",
    "maj": "May",
    "juni": "Jun",
    "juli": "Jul",
    "aug.": "Aug",
    "sep.": "Sep",
    "okt.": "Oct",
    "nov.": "Nov",
    "dec.": "Dec",
}
>>> s = "29 jan. 2021"
>>> op = s.split(" ")
>>> op
['29', 'jan.', '2021']
>>> op[1] = monthNameDictionary[op[1]]
>>> op
['29', 'Jan', '2021']
>>> " ".join(op)
'29 Jan 2021'
>>> 

如果您喜欢单线解决方案,这里是

代码语言:javascript
复制
>>> " ".join([monthNameDictionary.get(i, i) for i in s.split(" ")])
'29 Jan 2021'
>>> 
票数 4
EN

Stack Overflow用户

发布于 2021-06-02 08:35:59

您可以只对这种特定的格式使用strptime,如下所示:

代码语言:javascript
复制
import datetime as dt
date_obj = dt.datetime.strptime('29 jan. 2021', '%d %b. %Y')

我通常建议查看此页面,以了解如何解析日期字符串:https://strftime.org/

最后,如果要将其转换回另一种格式,则可以使用strftime

代码语言:javascript
复制
print(date_obj.strftime('%d %b %Y'))

编辑:我看到你有挪威语?在你的问题中的日期,需要转换成英语。加上几个月的格式变化

以下是解决您的问题的通用解决方案

代码语言:javascript
复制
import datetime as dt
import locale

locale.setlocale(locale.LC_ALL, "nn_NO")
dates = ['29 apr. 2021', '20 mars 2021', '1 okt. 2019', '5 juni 1990']
date_objs = []
for d in dates:
    fmt = '%d %b. %Y' if '.' in d else '%d %B %Y'
    date_objs.append(dt.datetime.strptime(d, fmt))

print(date_objs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67801627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档