【问题标题】:Python parse string environment variablesPython解析字符串环境变量
【发布时间】:2021-01-28 01:46:09
【问题描述】:

我想从字符串中解析环境变量。 例如:

envs = parse_env('name="John Doe" age=21 gender=male')
print(envs)
# outputs: {"name": "John Doe", "age": 21, "gender": "male"}

实现这一目标的最佳和最简约的方法是什么? 谢谢。

【问题讨论】:

  • 你可以控制字符串的格式吗?你的例子中的那个并不像它应该的那样容易解析。
  • 我想我可以去掉引号,这很容易,因为我认为值内不会有空格。只是有点野心勃勃。 :P
  • 值中没有空格(或使用转义序列而不是引号来表示值中的空格)使得它更容易。 :)

标签: python parsing environment-variables


【解决方案1】:

如果您可以规定您的值永远不会包含您在输入格式中使用的特殊字符(即= ),那么使用split 很容易做到这一点:

>>> def parse_env(envs):
...     pairs = [pair.split("=") for pair in envs.split(" ")]
...     return {var: val for var, val in pairs}
...
>>> parse_env("name=John_Doe age=21 gender=male")
{'name': 'John_Doe', 'age': '21', 'gender': 'male'}

如果你的特殊字符在不同的上下文中意味着不同的东西(例如,= 可以是 var 和 value 之间的分隔符,或者它可以是 value 的一部分),问题就更难了;您需要使用某种状态机(例如正则表达式)将字符串分解为标记,并考虑到字符串中可能使用字符的不同方式。

【讨论】:

  • 可以使用maxsplit=1解决问题:pair.split("=", maxsplit=1)
【解决方案2】:

您可以使用Python Dotevn 来解析带有变量的 .env 文件。您的文件.env 应该是这样的:

NAME="John Doe"
AGE=21
GENDER="male"

那么你应该可以运行了:

from dotenv import load_dotenv    
load_dotenv(dotenv_path=env_path)

祝你好运!

【讨论】:

  • 谢谢,但这不是我想要的。感谢您的帮助。
猜你喜欢
  • 2017-11-10
  • 2015-12-22
  • 2017-06-12
  • 2021-10-08
  • 2014-08-16
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多