【发布时间】:2012-02-25 18:25:45
【问题描述】:
我是否必须去掉文件名中的所有空格才能导入它,还是有什么方法可以告诉import有空格?
【问题讨论】:
-
你能显示一些代码吗?通常 Python 对文件名中的空格没有问题。 (哦等等,除非你在谈论
import语句,在这种情况下 Python 不支持模块名称中的空格。)
标签: python import filenames spaces
我是否必须去掉文件名中的所有空格才能导入它,还是有什么方法可以告诉import有空格?
【问题讨论】:
import 语句,在这种情况下 Python 不支持模块名称中的空格。)
标签: python import filenames spaces
你应该去掉文件名中的空格。因为文件名用作导入模块的标识符(即foo.py 将被导入为foo)并且Python 标识符不能有空格,所以import 语句不支持。
如果你真的出于某种原因需要这样做,你可以使用__import__函数:
foo_bar = __import__("foo bar")
这会将foo bar.py 导入为foo_bar。这与import 语句的行为有点不同,您应该避免它。
【讨论】:
如果您想执行from foo_bar import * 之类的操作(但使用空格而不是下划线),您可以使用 execfile(文档here):
execfile("foo bar.py")
虽然最好避免源文件名中的空格。
【讨论】:
exec(open("foo bar.py", "r").read())
from foo_bar import * 的行为可能与 execfile("foo_bar") 不同,如果 foo_bar 设置为 __all__ = [...](它控制从 *-import 使用时导出的内容
您还可以使用importlib.import_module 函数,它是__import__ 的包装器。
foo_bar_mod = importlib.import_module("foo bar")
或
foo_bar_mod = importlib.import_module("path.to.foo bar")
【讨论】:
只是为了补充 Banks 的答案,如果您要导入另一个未保存在 Python 检查导入目录的目录中的文件,则需要将该目录添加到您的路径中
import sys
sys.path.append("absolute/filepath/of/parent/directory/of/foo/bar")
打电话之前
foo_bar = __import__("foo bar")
或
foo_bar = importlib.import_module("foo bar")
如果您使用import <module> 导入它,则无需执行此操作,Python 将在其中检查模块的当前目录。例如,如果您要从同一目录导入模块,请使用
import os,sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
foo_bar = __import__('foo_bar')
希望这可以避免其他人尝试导入他们自己的奇怪命名文件或他们手动下载的 Python 文件 :)
【讨论】: