如何导入自定义json模块而不是python 2.7中的默认值?

时间:2012-08-10 19:47:09

标签: python json

假设我的目录结构是:

C:\Scripts\myscript.py
C:\Scripts\customjson\json.py

myscript.py python脚本位于顶部:

sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'customjson'))
import json

问题是,我有一个“customjson”文件夹,其中包含我想要使用的json.py,而不是Python 2.7附带的默认json包。如何使脚本使用“customjson”而不是标准的json?

3 个答案:

答案 0 :(得分:2)

尝试首先在sys.path中插入customjson目录:

sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), 'customjson'))
import json

答案 1 :(得分:0)

您可以使用以下内容:

import sys
_orig_path = sys.path
sys.path = ["C:\Scripts\customjson"]
import json
sys.path = _orig_path

但是,当然,该代码不可移植。为了使其可移植,您可以使用:

import sys, os
_orig_path = sys.path
sys.path = [
    os.path.abspath(os.path.join(os.path.dirname(__file__), "customjson")),
]
import json
sys.path = _orig_path

或者,您可以将json.py重命名为json2.py。然后导入它:

import json2

或者,如果您绝对需要将其命名为json

import json2 as json

..是的,第二个看起来更好,不是吗?

答案 2 :(得分:0)

我说:将customjson文件夹设为package

很简单:

  1. 在customjson文件夹中创建名为__init__.py的文件。如果您不想在包级别定义任何特殊内容,则该文件可以为空。
  2. 更改您的import语句以引用包中的模块(即import customjson.json)。
  3. 更改对模块的引用以使用完整路径(customjson.json.whatever),或者进一步更改import语句以包含为as子句(import customjson.json as json)。如果您使用from ... import ...语法,则无需这样做。虽然使用as子句可能比重写访问更容易,但它可能会让任何其他程序员感到困惑,他们会读取您的代码并期望它使用标准的json模块。
  4. 考虑到你在问题中描述的文件夹布局,如果你走这条路线,你根本不需要乱用模块搜索路径,因为运行脚本的当前文件夹总是包含在customjson包的路径和位置。