Python Tips: - や . などの文字が入ったファイルを import で読み込みたい

Python でファイル名に - や . 、スペースなどが含まれるファイルを読み込む方法をご紹介します。

通常 Python では PEP8 に則るかぎりファイル名に - やスペースなどを使うことはありません。ですのでふだんこのような処理をする必要はありませんが、万が一のときのために - やスペースが含まれるファイルを読み込む方法を知っておくと便利です。

たとえば my-gorgeous-script.py というファイルを読み込みたい場合。通常ライブラリやスクリプトは import で読み込むのですが、 - がマイナスとして認識されてしまうため次のようにエラーが発生してしまいます。

import my-gorgeous-script
# => SyntaxError: invalid syntax

import の代わりに import を使えば OK です。

mgs = __import__('my-gorgeous-script')

このあとは import my-gorgeous-script as mgs という行を実行したときのように mgs という名前をライブラリ名として使うことができます。

ただし参考リンクのリンク先で説明されているように、この方法はできるかぎり使うべきではありません。「こういうことができる」ことを知っておくにとどめて、実際に使うのは避けた方がよいでしょう。


Package and Module Names Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.

Since module names are mapped to file names, and some file systems are case insensitive and truncate long names, it is important that module names be chosen to be fairly short -- this won't be a problem on Unix, but it may be a problem when the code is transported to older Mac or Windows versions, or DOS.

意訳:

パッケージとモジュールの名前はすべて小文字の短い名前にすべきです。読みやすさが向上するなら、アンダースコアを使ってもかまいません。 Python パッケージも同じくすべて小文字の短い名前にすべきですが、アンダースコアの使用は非推奨となっていみあす。

モジュール名はファイル名にマップされますし、ファイルシステムによっては大文字小文字の区別を行わず長い名前を断ち切ってしまうので、モジュール名にはかなり短いものを選ぶということが重要です。 --- これは Unix では問題になりませんが、コードが古いバージョンの Mac や Windows 、 DOS に移されたときに問題になることがあります。

以上です。

import 文に興味のある方には次のページも参考になるかもしれません。

参考