从bash调用的Python oneliner中不区分大小写的字典查找

2024-04-27 04:45:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我并没有找到解决这个问题的方法,甚至在这里涉及到Python中不区分大小写的字典的其他主题上。你知道吗

我有一个bash脚本,需要使用从另一个.json文件提取的键从.json文件中查找一个值。(这些文件是Chrome扩展的一部分。)我发现最简单的方法是在bash脚本中加入Python一行程序。我现在得到的是:

extName=$(cat "$localePath" | python -c "import sys, json; sys.stdout.write(json.load(sys.stdin)['"$nameKey"']['message'])")

问题是。。。Chrome似乎不关心json文件中的大小写,在一些扩展中,我以前从扩展的清单.json)into$nameKey与$localePath(指向消息.json扩展名的\u locales文件夹中的文件)。你知道吗

有没有一种方法可以在Python一行程序中实现这一点,或者我必须找到一种不同的方法来实现这一点?你知道吗


Tags: 文件方法程序脚本bashjson主题字典
2条回答

它不是有史以来最优雅的一行,但您可以将所有dict键和值转换为小写条目,并使用小写键来查询它。你知道吗

Python 2.x版:

extName=$(cat "$localePath" | python -c "import sys, json; {key.lower(): value.lower() for key, value in sys.stdout.write(json.load(sys.stdin).iteitems()}['"$nameKey"'.lower()]['message'])")

Python 3.x版:

extName=$(cat "$localePath" | python -c "import sys, json; {key.lower(): value.lower() for key, value in sys.stdout.write(json.load(sys.stdin).items()}['"$nameKey"'.lower()]['message'])")

我明白了!我修复了Aurora建议的Python2.x解决方案中的一些问题,最终得到了以下结果:

extName=$(cat "$localePath" | python -c "import sys, json; sys.stdout.write(dict((key.lower(), value) for key, value in json.load(sys.stdin).iteritems())['""$nameKey""'.lower()]['message'])")

相关问题 更多 >