所以,我有两个python文件:
第1" m12345.py"
def my():
return 'hello world'
第二个" 1234.py":
from m12345 import *
a = m12345.my()
print(a)
在ipython上我尝试执行这样的cmds:
exec(open("f:\\temp\\m12345.py").read())
exec(open("f:\\temp\\1234.py").read())
第二个命令的错误是:
ImportError: No module named 'm12345'
请帮助如何将第一个文件添加为第二个模块?
答案 0 :(得分:2)
首先,如果您使用通用导入(from m12345 import *
),那么您只需拨打my()
功能而不是m12345.my()
,否则您将获得
NameError:name' m12345'未定义
其次,您应该在每个脚本中添加以下代码片段,以便能够直接运行它(导入时)。
if "__name__" = "__main__":
pass
PS。将其添加到第一个脚本(" m12345.py")。 PS2。避免使用通用导入方法,因为它能够弄乱脚本的命名空间。 (因此,它不被认为是最佳实践)。
编辑:m12345.py是否位于python文件夹中(它安装在硬盘中)?如果没有,那么您应该使用以下命令添加它在sys.path中的目录:
import sys
sys.path.append(directory)
其中directory是m12345.py所在位置的字符串。请注意,如果您使用Windows,则应使用/
而非\
。
但是,重新定位脚本会更容易(如果可能的话)。
答案 1 :(得分:1)
您必须通过调用m12345 = imp.new_module('m12345')
创建一个新模块(例如exec(open('path/m12345.py').read(), m12345.__dict__)
),然后通过调用import imp
pyfile = open('path/m12345.py').read()
m12345 = imp.new_module('m12345')
exec(pyfile, m12345.__dict__)
来执行该模块中的python脚本。请参阅以下示例:
sys.modules['m12345'] = m12345
如果您希望模块位于系统路径中,可以添加
import m12345
在此之后你可以做到
from m12345 import *
或
var a = ['first', 'second', '<error>', 'Can not parse the third element', '</error>', 'fourth', 'fifth'];
var b = [];
var startJoinIndex = 2;
var endJoinIndex = 4;
var joinedValue = "";
a.forEach(function(item, index){
if (index >= startJoinIndex && index <= endJoinIndex){
joinedValue += item;
if (index === endJoinIndex){
b.push(joinedValue);
}
} else {
b.push(item);
}
});
console.log(b);