如何在Python中导入名称中带有空格的文件?

问题描述 投票:0回答:4

我是否必须取出文件名中的所有空格才能导入它,或者是否有某种方法告诉

import
有空格?

python import filenames spaces
4个回答
86
投票

您应该去掉文件名中的空格。由于文件名用作导入模块的标识符(即

foo.py
将导入为
foo
)并且 Python 标识符不能包含空格,因此
import
语句不支持此功能。

如果您确实出于某种原因需要这样做,您可以使用

__import__
功能:

foo_bar = __import__("foo bar")

这会将

foo bar.py
导入为
foo_bar
。这与
import
语句的行为有点不同,您应该避免它。


12
投票

如果你想做类似

from foo_bar import *
的事情(但用空格而不是下划线),你可以使用 execfile (文档here):

execfile("foo bar.py")

尽管最好的做法是避免源文件名中出现空格。


10
投票

您还可以使用

importlib.import_module
函数,它是
__import__
的包装。

foo_bar_mod = importlib.import_module("foo bar")

foo_bar_mod = importlib.import_module("path.to.foo bar")

更多信息:https://docs.python.org/3/library/importlib.html


4
投票

只是为了添加到 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 文件:)

© www.soinside.com 2019 - 2024. All rights reserved.