【问题标题】:How do you import a file in python with spaces in the name?如何在 python 中导入名称中带有空格的文件?
【发布时间】:2012-02-25 18:25:45
【问题描述】:

我是否必须去掉文件名中的所有空格才能导入它,还是有什么方法可以告诉import有空格?

【问题讨论】:

  • 你能显示一些代码吗?通常 Python 对文件名中的空格没有问题。 (哦等等,除非你在谈论 import 语句,在这种情况下 Python 不支持模块名称中的空格。)

标签: python import filenames spaces


【解决方案1】:

你应该去掉文件名中的空格。因为文件名用作导入模块的标识符(即foo.py 将被导入为foo)并且Python 标识符不能有空格,所以import 语句不支持。

如果你真的出于某种原因需要这样做,你可以使用__import__函数:

foo_bar = __import__("foo bar")

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

【讨论】:

    【解决方案2】:

    如果您想执行from foo_bar import * 之类的操作(但使用空格而不是下划线),您可以使用 execfile(文档here):

    execfile("foo bar.py")
    

    虽然最好避免源文件名中的空格。

    【讨论】:

    • 只是补充一下,在 Python 3 中它将是 exec(open("foo bar.py", "r").read())
    • 这不会为模块创建命名空间
    • from foo_bar import * 的行为可能与 execfile("foo_bar") 不同,如果 foo_bar 设置为 __all__ = [...](它控制从 *-import 使用时导出的内容
    【解决方案3】:

    您还可以使用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 文件 :)

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 2017-01-25
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        相关资源
        最近更新 更多