如何在 AWS AMI Linux Lambda 中设置语言环境?

Rom*_*mez 7 python-3.x aws-lambda amazon-ami

我在 python 中有一个小脚本,它利用语言环境来格式化从 1.000,00 到 1,000.00 的数字

import re, locale
locale.setlocale(locale.LC_ALL, 'es_PE.UTF-8')

locale.atof(number)
Run Code Online (Sandbox Code Playgroud)

然后当我在 Lambda 中运行它时,我收到以下错误消息:

不支持的区域设置

我知道如何通过在终端中执行以下命令在我的 PC 中安装依赖项:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

来源:https : //stackoverflow.com/a/36257050/2513972

Mur*_*ski 0

要确定可用区域设置的列表,请参阅https://phrase.com/blog/posts/beginners-guide-to-locale-in-python/

for lang in locale.locale_alias.values():
    print(lang)
Run Code Online (Sandbox Code Playgroud)

您将无法在默认的 AWS Lambda Python 运行时环境中“安装”任何内容,并且设置自定义运行时可能会带来更多麻烦。您可以看看是否还有其他可以使用的东西。

如果您确实只是将 1.000,00 转换为 1,000.00,我建议您只运行自己的字符替换。一个简单的字符检查循环不会比它慢任何atof并且副作用也更少。

如果您对如何atof工作感到好奇,可以在https://github.com/python/cpython/blob/3.10/Lib/locale.py#L336中跟踪它的源代码跟踪

如果您不想使用自己的角色替换,您可以使用format自定义的format_spec.

>>> '{:,.2f}'.format(10000)
'10,000.00'
Run Code Online (Sandbox Code Playgroud)

下一行几乎遵循与 中相同的步骤atof。通过替换进行离域然后浮动。

>>> '{:,.2f}'.format(float('10.000,00'.replace('.','').replace(',','.')))
'10,000.00'
Run Code Online (Sandbox Code Playgroud)

https://docs.python.org/3/library/functions.html#format https://docs.python.org/3/library/string.html#formatspec

如果您确实想自定义 lambda 运行时,请参阅以下内容:

https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html https:// docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html