在 JSON 配置文件中为 Python 包含目录路径的正确方法
Correct way to include directory paths in a JSON config file for Python
我环顾四周,只找到了将目录树写入 JSON 文件的答案 - 这很好,但没有解决我当前的问题。我正在寻找执行此操作的语法或针对我的整体问题的更好方法。
高级:我正在开发一些企业软件的 Python 包装器来自动执行一些测试。理想情况下,我可以用代码发送一个配置文件,这样 运行 进行测试的人只需要担心配置文件而不是代码本身。我想在配置文件中包含目录路径,因为它们是相对于代码所在的机器 运行 的。我希望 Python
中存在等同于 JSON 的字符串文字
r"This\Type\Of\Thing!"
这样我就可以简单地拥有这样的东西:
{"relevant_paths": {
"path1": r"C:\users\whatever\path",
"path2": r"C:\useres\another\whatever\path\"
}
}
将它们作为 dict 值访问,但正如您已经知道的那样,事实并非如此。此外,单引号作为转义字符对我不起作用,除非它只是 PyCharm 抱怨而且我不明白为什么(很有可能)。
那么有没有办法在 JSON 中包含目录路径,或者我真的应该重新考虑我是如何发布它的?
只包含原始字符串。 JSON 从来没有像上面那样给我存储路径的问题,但是它确实转义了路径中的反斜杠,正如 JSON 规范所要求的那样。
Python 3.4.9 (default, Aug 14 2018, 21:28:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> _tmp = {}
>>> _tmp['relevant_paths'] = {}
>>> _tmp['relevant_paths']['path1'] = r'C:\users\whatever\path',
>>> _tmp['relevant_paths']['path2'] = r'C:\useres\another\whatever\path'
>>> import json
>>> print(json.dumps(_tmp, indent=4))
{
"relevant_paths": {
"path2": "C:\useres\another\whatever\path",
"path1": "C:\users\whatever\path"
}
}
- 字符串
字符串的表示类似于 C 中使用的约定
编程语言家族。一个字符串以
引号。所有 Unicode 字符都可以放在
引号,除了必须转义的字符:
引号、反斜线 和控制字符 (U+0000
通过 U+001F).
(注意:反斜线是反斜杠,需要以正确格式转义 JSON。)
我环顾四周,只找到了将目录树写入 JSON 文件的答案 - 这很好,但没有解决我当前的问题。我正在寻找执行此操作的语法或针对我的整体问题的更好方法。
高级:我正在开发一些企业软件的 Python 包装器来自动执行一些测试。理想情况下,我可以用代码发送一个配置文件,这样 运行 进行测试的人只需要担心配置文件而不是代码本身。我想在配置文件中包含目录路径,因为它们是相对于代码所在的机器 运行 的。我希望 Python
中存在等同于 JSON 的字符串文字r"This\Type\Of\Thing!"
这样我就可以简单地拥有这样的东西:
{"relevant_paths": {
"path1": r"C:\users\whatever\path",
"path2": r"C:\useres\another\whatever\path\"
}
}
将它们作为 dict 值访问,但正如您已经知道的那样,事实并非如此。此外,单引号作为转义字符对我不起作用,除非它只是 PyCharm 抱怨而且我不明白为什么(很有可能)。
那么有没有办法在 JSON 中包含目录路径,或者我真的应该重新考虑我是如何发布它的?
只包含原始字符串。 JSON 从来没有像上面那样给我存储路径的问题,但是它确实转义了路径中的反斜杠,正如 JSON 规范所要求的那样。
Python 3.4.9 (default, Aug 14 2018, 21:28:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> _tmp = {}
>>> _tmp['relevant_paths'] = {}
>>> _tmp['relevant_paths']['path1'] = r'C:\users\whatever\path',
>>> _tmp['relevant_paths']['path2'] = r'C:\useres\another\whatever\path'
>>> import json
>>> print(json.dumps(_tmp, indent=4))
{
"relevant_paths": {
"path2": "C:\useres\another\whatever\path",
"path1": "C:\users\whatever\path"
}
}
- 字符串
字符串的表示类似于 C 中使用的约定 编程语言家族。一个字符串以 引号。所有 Unicode 字符都可以放在 引号,除了必须转义的字符: 引号、反斜线 和控制字符 (U+0000 通过 U+001F).
(注意:反斜线是反斜杠,需要以正确格式转义 JSON。)