2015/09/23

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 に移されたときに問題になることがあります。


参考
naming - Is it ok to use dashes in Python files when trying to import them? - Stack Overflow
Package and Module Names - PEP 0008 -- Style Guide for Python Code | Python.org

2015/09/16

Python Tips:数値リテラルに対して直接メソッドを呼び出したい

Python で数値リテラルから直接メソッドを呼び出す方法をご紹介します。

Python では数値リテラルにかぎらずリテラルから直接メソッドを呼び出す機会(=必要性)はあまりありませんが、言語としてはそれが可能なように作られています。

'hello'.upper()  # => 'HELLO'
'hello world'.title()  # => 'Hello World'

str 型の join() メソッドは比較的よく使いますよね。

message = ','.join(['a', 'b', 'c'])  # => 'a,b,c'

あまり見る/使う機会はありませんが、数値リテラルでも直接メソッド呼び出しが可能です。ただし数字の場合は . が小数点のドットとみなされてしまうため、 () で囲う必要があります。

3.real
# => SyntaxError: invalid syntax

(3).real  # => 3
(3 + 4j).imag  # => 4.0

その必要がある場合はなかなかありませんが、ここぞというときに使えるようにしておくと便利かもしれません。

2015/09/03

Python Tips:pip で最新版でないパッケージを確認したい

Python のパッケージ管理ツール pip で、ローカルにインストールされているパッケージのうち最新版でないものを確認する方法をご紹介します。最新版でないものは `pip list` に `--outdated` オプションを渡すと確認することができます。

$ pip list --outdated

逆に最新版のもののみをリストにしたい場合は `--uptodate` オプションを使いましょう。

$ pip list --uptodate

参考
pip list — pip 公式ドキュメント