gpt4 book ai didi

python - 用于解析 python 中简单语法的模块

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:26 25 4
gpt4 key购买 nike

我的目标是在 Linux 下使用 Python 2.7.6 读取文件 /etc/os-release 并获取字典。该文件在 Ubuntu 中看起来像这样:

NAME="Ubuntu"
VERSION="14.04.2 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.2 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

我想以这样的 Python 代码创建的字典结果结束:

{
'NAME': 'Ubuntu',
'VERSION': '14.04.2 LTS, Trusty Tahr',
'ID': 'ubuntu',
'ID_LIKE': 'debian',
'PRETTY_NAME': 'Ubuntu 14.04.2 LTS',
'VERSION_ID': '14.04',
'HOME_URL': 'http://www.ubuntu.com/',
'SUPPORT_URL': 'http://help.ubuntu.com/',
'BUG_REPORT_URL': 'http://bugs.launchpad.net/ubuntu/',
}

我在 Python 库中发现了一些解析器,但每个解析器都解析了其他更复杂的语法。我在这里找到了示例,但所有示例都是针对更复杂的语法,并回答了如何编写解析器的代码。我只是在寻找一个已经存在的模块/功能。如果没有,那么,我将只编写自己的代码(所以我不会寻找代码示例,除非它是我应该做的)。麻烦的是我什至不知道这种语法的名称。虽然我目前的项目是将 /etc/os-release 作为字典,但我希望将来需要对类似语法的其他数据执行此操作,所以我的搜索主要集中在语法上,不是那个文件。

我认为这么简单的东西应该已经存在了。

有趣的是,SO 的代码示例显示突出显示了它,就好像这里的 Web 代码可以解析它,但这不是 Python。

最佳答案

只需通过拆分来制作自己的字典:

with open("/etc/os-release") as f:
d = {}
for line in f:
k,v = line.rstrip().split("=")
d[k] = v
print(d)

如果你真的想删除引号,你可以使用 strip:

with open("/etc/os-release") as f:
d = {}
for line in f:
k,v = line.rstrip().split("=")
# .strip('"') will remove if there or else do nothing
d[k] = v.strip('"')
print(d)


{'VERSION': '14.04.2 LTS, Trusty Tahr', 'NAME': 'Ubuntu', 'HOME_URL': 'http://www.ubuntu.com/', 'ID': 'ubuntu', 'VERSION_ID': '14.04', 'SUPPORT_URL': 'http://help.ubuntu.com/', 'PRETTY_NAME': 'Ubuntu 14.04.2 LTS', 'BUG_REPORT_URL': 'http://bugs.launchpad.net/ubuntu/', 'ID_LIKE': 'debian'}
{'BUG_REPORT_URL': 'http://bugs.launchpad.net/ubuntu/',
'HOME_URL': 'http://www.ubuntu.com/',
'ID': 'ubuntu',
'ID_LIKE': 'debian',
'NAME': 'Ubuntu',
'PRETTY_NAME': 'Ubuntu 14.04.2 LTS',
'SUPPORT_URL': 'http://help.ubuntu.com/',
'VERSION': '14.04.2 LTS, Trusty Tahr',
'VERSION_ID': '14.04'}

关于python - 用于解析 python 中简单语法的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com