【发布时间】:2021-05-12 14:57:22
【问题描述】:
我需要用 python 更改很多 strings,其中 Spanish 日期格式(DDMMMYYYY,西班牙语中的 MMM 缩写月份)采用其他日期时间格式,但我是有问题,因为我的语言环境西班牙语设置有一个“。” (a dot) 以缩写月份格式更改此格式时在字符串末尾。
默认情况下,python 采用英语版本的语言,但我可以使用 locale 库更改语言。 当我选择 'esp' 或 'es_ES.utf8' 时,会出现缩写月份末尾的点。
这是否取决于我的 Windows 10 的区域设置? (我检查了一下,似乎一切正常)它是否取决于 LOCALE 库设置? UBUNTU 中的相同代码运行正常(没有重点)
我该如何解决这个问题?
我不想像那样转换所有字符串..
str_date = str_date[:5] + "." + str_date[5:]
非常感谢!!
示例(之前我使用语言环境更改语言):
>>> datetime.strptime('2021-01-18', '%Y-%m-%d').strftime('%b')
'ene.'
>>> print(datetime.strptime('18ene2021', '%d%b%Y'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\galonsoi\AppData\Local\Programs\Python\Python36\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:\Users\galonsoi\AppData\Local\Programs\Python\Python36\lib\_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '18ene2021' does not match format '%d%b%Y'
>>> print(datetime.strptime('18ene.2021', '%d%b%Y'))
2021-01-18 00:00:00 ----> THIS IS OK BECAUSE I WRITE THE DOT AT THE END OF THE ABBREVIATED MONTH
示例的完整序列
>>> import locale
>>> from datetime import datetime
>>>
>>> locale.getlocale()
(None, None)
>>> print (datetime.strptime('2021-01-18', '%Y-%m-%d').strftime('%b'))
Jan
>>> locale.setlocale(locale.LC_ALL, '')
`Spanish_Spain.1252`
>>> locale.getlocale()
(`es_ES`, `cp1252`)
#INCORRECT FORMAT, ADD A "." AT THE END
>>> print (datetime.strptime('2021-01-18', '%Y-%m-%d').strftime('%b'))
ene.
>>> locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
`es_ES.UTF-8`
#FORMATO INCORRECTO, AÑADE UN "." a may
>>> print (datetime.strptime('2021-01-18', '%Y-%m-%d').strftime('%b'))
ene.
>>> print(datetime.strptime('18ene2021', '%d%b%Y'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\galonsoi\AppData\Local\Programs\Python\Python36\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:\Users\galonsoi\AppData\Local\Programs\Python\Python36\lib\_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '18ene2021' does not match format '%d%b%Y'
>>> print(datetime.strptime('18ene.2021', '%d%b%Y'))
2021-01-18 00:00:00 ----> THIS IS OK BECAUSE I WROTE THE DOT AT THE END OF THE ABBREVIATED MONTH
【问题讨论】:
-
澄清问题:您尝试清理的数据具有西班牙月份名称(例如“ene”)但没有点,这是使用 strptime 解析所必需的?
-
没错,我的琴弦没有圆点,而圆点是清理它所必需的。我在 ubuntu 中也有同样的功能,它工作正常,因为不需要点。
标签: python python-3.x datetime utf-8 locale