2016-06-22 1 views
0

私はos.path.join()私はパスを構築するために持っていると私はこの1つのようなショートカットを定義することを考えていたそれぞれの時間を入力するのは本当に疲れ:(os.path.joinを行うためのショート方法)

def pj(*args): 
    from os.path import join 
    return join(args) 

しかし、それはスローされますTypeError: join() argument must be str or bytes, not 'tuple'

私はos.path.join()に引数を渡す正しい方法は何ですか、私はホイールを再発明しようとしていますか?

+3

あなたは '関数内import'べきではありません。なぜあなたがそれを使用しているところで 'from os.path import join'だけではないのですか?そうすれば、 'os.path.'と入力する必要がなくなり、2文字だけ長くなります(より読みやすく、既にあなたのコードを読んでいる人は誰でも知っているでしょう)。 – jonrsharpe

+1

私は関数の外にインポートを配置します。ヘルパー関数をインポートすると、実行される回数は少なくなります。 os.pathからimport – syntonym

答えて

3

あなたは.join引数を解凍する必要があります

join(*args) 
# ^

ので、同じように:

>>> import os.path.join 
>>> args = ('/usr/main/', 'etc/negate/') 
>>> os.path.join(*args) 
'/usr/main/etc/negate/' 

P.S:importを使用して、あなたの関数では非常に良いアイデアではありません。それをモジュールの上部に移動します。

+3

をインポートするとpjが良い選択肢になるかもしれません。 –

+0

@MatthiasSchreiberはい可能です。 'numpy - > np'、' pandas - > pd'、なぜそうではないか、そのような短い形式で人がどれくらい慣れ親しむことができるかによって異なります。 –

2

Python 3.4を使用している場合は、pathlibを試すことができます。

ドキュメントから

:あなたはimport文で、名前を変更することができます

>>> p = Path('/etc') 
>>> q = p/'init.d'/'reboot' 
>>> q 
PosixPath('/etc/init.d/reboot') 
0

from os.path import join as pj # or whatever other name you pick 
           # to distinguish it from str.join 
関連する問題