【发布时间】:2016-02-12 04:42:39
【问题描述】:
有几个与从外部文件读取python代码相关的问题,包括
Python: How to import other Python files
How to include external Python code to use in other files?
但不清楚如何包含来自外部文件的文本 sn-ps,这是 CPP #include 指令的标准做法。例如以下代码:
def get_schema():
schema1 = \
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "0",
"type": "object",
"properties": {
"i": { "type": "integer" },
"n": { "type": "string" }
}
}
return(schema1)
s = get_schema()
print(s)
返回预期的字典:
{'id': '0', '$schema': 'http://json-schema.org/draft-04/schema#', 'type': 'object', 'properties': {'i': {'type': 'integer'}, 'n': {'type': 'string'}}}
但我想做的是编写代码,以便它从不包含任何 python 代码(函数定义或变量分配)的外部文件导入变量定义:
def get_schema():
schema1 = \
#include "schema1.json"
return(schema1)
s = get_schema()
print(s)
我确信这可以通过一堆代码来打开定义文件,将内容读入字符串,添加 python 的前导和后导行,然后执行字符串,但似乎应该有一种更简单的方法来在函数定义中包含文本。有吗?
【问题讨论】:
-
Python 没有预处理器,因此您不能像在 C 中那样包含稍后编译的文本。例如,没有
#ifdef。虽然您可以使用if 0跳过执行块,但块被编译为字节码并占用执行映像中的空间。 -
不确定你到底在追求什么。在我看来,您有一个问题,想到了一个可能的解决方案(使用 c/c++ 范例)并希望在 python 中实现它。也许如果你更好地解释你原来的问题,我们可以提供一个 pythonic 解决方案。您能否提供一个更一般的示例来说明您将放入外部文件中的内容?我从您下面的评论中看到,您对比加载 JSON 数据更通用的东西感兴趣。
-
对于一般情况“无法完成”是一个合理的答案。将 json 文件的开发和配置管理与 Python 文件分开似乎是一种很好的做法,如果这种模式再次出现在不同类型的数据(可能是常量定义?),知道正确的方法是使用或编写导入例程比想知道是否有内置替代方案要好。
-
@jorgeh,令我印象深刻的是,语法上有效的 json 字符串的子集也是语法上有效的 Python 右值。随之而来的两个问题是:1) 是否有任何有效的 json 字符串不是有效的直接可执行 Python,以及 2) 是否有任何其他独立开发的数据格式是 Python 语法的子元素。但鉴于 Python 不能导入比模块更小的任何东西,因此无需进一步考虑这些问题。
-
@Dave,至少有一种情况是有效的 JSON 不是有效的 python:
{"flag": true}。 JSON 接受小写的true,但 python 会失败。可能还有其他情况,但至少这个回答了你的第一个问题。我不知道你的第二个问题。
标签: python json python-3.x