web-dev-qa-db-ja.com

名前にスペースを含むpythonにファイルをどのようにインポートしますか?

私はする必要がありますファイル名のすべてのスペースを取り除いてインポートしますか、それともimportにスペースがあることを伝える方法はありますか?

35
lilfrost

ファイル名からスペースを削除する必要があります。ファイル名はインポートされたモジュールの識別子として使用されるため(つまり、foo.pyfooとしてインポートされます)、Python識別子にはスペースを含めることができません。これはimportステートメントでサポートされています。

本当にが何らかの理由でこれを行う必要がある場合は、__import__関数を使用できます。

foo_bar = __import__("foo bar")

これにより、foo bar.pyfoo_barとしてインポートされます。これはimportステートメントとは少し動作が異なるため、回避する必要があります。

50
Jeremy Banks

from foo_bar import *(ただしアンダースコアの代わりにスペースを使用)のようなことをしたい場合は、execfile(docs here )を使用できます。

execfile("foo bar.py")

ただし、ソースファイル名にスペースを使用しないことをお勧めします。

8
drevicko

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/2/library/importlib.html

1
TBirkulosis

Banksの回答に追加するために、ディレクトリの1つに保存していない別のファイルをインポートしている場合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ファイルを手動でダウンロードしたファイルをインポートしようとする他の誰かが救うことを願っています:)

0
Anonymous