1

私はpythonプログラムを持っています。プログラム内からプログラムへのパスを取得したいのですが、ファイル名自体が含まれています。私のファイルの名前は PyWrapper.py です。今、私はこれをやっています:

import sys,os
pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)
print fullpath

出力は次のとおりです。

 /home/mrpickles/Desktop/HANSTUFF/securesdk/src/

これは私のファイルが保存されているディレクトリへのパスですが、出力したい:

/home/mrpickles/Desktop/HANSTUFF/securesk/src/PyWrapper.py/

ファイル名自体を含むパスです。これは可能ですか?ありがとう。

4

4 に答える 4

2

をご覧ください__file__これにより、コードが実際にあるファイル名が得られます。

また、別のオプションがあります。

import __main__ as main
print(main.__file__)

これにより、実行中のスクリプトのファイル名が得られます(あなたが行うのと同様argv)。

コードが別のスクリプトによってインポートされると、違いが現れます。

于 2016-06-10T18:19:00.843 に答える
0
print __file__

動作するはずです。

__file__実行されたファイルのパスを返します

于 2016-06-10T18:16:46.873 に答える
0

同じディレクトリで、現在実行中のファイルだけでなく、他のファイルの絶対パスを見つけたい場合に備えて、一般的なアプローチは次のようになります。

import sys,os

pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)

for root, dirs, files in os.walk(fullpath):
    for name in files:
        name = str(name)
        name = os.path.realpath(os.path.join(root,name))
        print name

__file__他の人が言及しているように、属性を利用できます。この属性を使用し__file__て、現在読み込まれている Python モジュールに関連するいくつかの異なるパスを返すことができます (別の StackOverflow answerからコピーされます)。

モジュールが Python にロードされると、ファイルはその名前に設定されます。その後、それを他の関数で使用して、ファイルが配置されているディレクトリを見つけることができます。

# The parent directory of the directory where program resides.
print os.path.join(os.path.dirname(__file__), '..')

# The canonicalised (?) directory where the program resides.
print os.path.dirname(os.path.realpath(__file__))

# The absolute path of the directory where the program resides.
print os.path.abspath(os.path.dirname(__file__))

ロードしているモジュールがどこから来たのか注意してください。属性の内容に影響を与える可能性があります ( Python 3 Data model documentation__file__からコピー):

__file__モジュールがファイルからロードされた場合、モジュールがロードされたファイルのパス名です。インタープリターに静的にリンクされている C モジュールなど、特定のタイプのモジュールでは属性が欠落している可能性があります__file__。共有ライブラリから動的にロードされる拡張モジュールの場合、これは共有ライブラリ ファイルのパス名です。

于 2016-06-10T18:19:14.290 に答える
0

使ってみてください__file__。モジュールがファイルから実行されている限り、つまりエディター内のコードではなく__file__、モジュールへの abs パスになります!

print __file__

またはコマンドライン用。

def get_my_name():
    if __name__ == '__main__':
        return os.path.abspath(os.path.join(os.curdir, __file__))
    else:
        return __file__.replace('.pyc', '.py')
于 2016-06-10T18:22:10.967 に答える