を実行すると、ファイル名がfoo.py
になることがありますが、それ以外の場合はfoo.pyc
となります。私はpycがコンパイルされたファイルであることを理解しています。コンパイルされたファイルは、おそらくコンパイル後に毎回使用されます。私はちょうどbasename
がpycファイル名を返す理由について混乱していますか?それは普通ですか?次に、コンパイルされていないファイル名を返すか、拡張子を付けずに返すようにするにはどうすればよいですか?なぜbasenameはコンパイルされたファイル名を返しますか?
答えて
を使用してください。__file__
は、*モジュールで実際にロードされたファイルを反映しています。モジュールをインポートするとき、Pythonは最初に.pyc
ファイルを見つけようとします。見つかった場合は使用されたファイル名になります。そうでなければ.py
ファイルになります。
それはは Pythonはそれができるならば、キャッシュファイルを作成しようとしますと、あなたは、それが代わりに.pyc
ファイルを読み込ま見つけるインタプリタの次実行時に.py
から__file__
かのポイントということかもしれません。また、でない可能性があります。は.py
ソースファイルです。一部のプロジェクトは.pyc
ファイル形式でのみ配布されます。最後に、Pythonはトップレベルのスクリプト用に.pyc
ファイルを作成しません。
.py
ソースファイルfilenameをフェールセーフで生成するには、末尾からc
を削除するだけです。あなたはd
があまりにも(最適化されたバイトコードは、現在唯一のストリッピングがアサート).pyd
ファイルを処理するために含めることができます
sourcefile = __file__.rstrip('cd')
は、ファイルが実際に存在するかどうかを確認ください! *
キャッシュされたバイトコード・ファイルが格納されている場所のPython 3が変更され、.pyc
ファイルが存在する場合でも、一方が存在する場合__file__
は、ソース・ファイル・パスを使用します。
'splitext'より' rstrip'を好むのはなぜですか? – Tjorriemorrie
@Tjorriemorrie:シンプル。これは、ロード可能なすべてのモジュール拡張( '.dll'、' .so'、 '.pyc'、' .pyd'、 '.py') –
__file__
は、あなたがそれについて何かをする前に定義されています。あなたの代わりに.py
ファイルを取得したい場合、あなたはそれがあなた自身であるかを把握する必要があります:
without_ext = os.path.splitext(os.path.basename(__file__))[0]
with_new_ext = os.path.extsep.join(without_ext, "py")
時には、.py
ファイルが存在すらしていません。あなたがコードを書いたので、あなたはそれを削除したことはありませんが、その可能性があります。存在することを確認するには、os.path.isfile()
- 1. なぜ "basename <(readlink -f filename)"は実際のベース名ではなく "63"を返しますか?
- 2. なぜ「名前を返すか」 nullが返されますか?
- 3. Rails:なぜ私のscssファイルはコンパイルされませんか?
- 4. なぜこの無名関数は返されませんか?
- 5. なぜ私の狂ったライブラリはコンパイルされませんか?
- 6. ファイル名がalamoでnilを返すのはなぜですか?
- 7. Delphi 2007 VCLプロジェクト名はコンパイルされたExe名と異なりますか?
- 8. これはなぜコンパイルされますか?
- 9. これはなぜコンパイルされますか?
- 10. A()= A() - それはなぜコンパイルされますか?
- 11. ラムダとジェネリックス:これはなぜコンパイルされますか?
- 12. なぜgetGeneratedKeys()は列名として "GENERATED_KEY"を返しますか?
- 13. コンパイルされたAPKがminSdkVersionを尊重しないのはなぜですか?
- 14. なぜこれはVS 2015ではコンパイルされますが、IDEOneではコンパイルされませんか?
- 15. なぜNaNが返されますか?
- 16. SignToolが "ファイル名、ディレクトリ名、またはボリュームラベル...."エラーを返します。
- 17. 特定の.cppファイルがコンパイルされないのはなぜですか?
- 18. `this.type`:なぜこれはコンパイルされませんか?
- 19. Javaジェネリックスワイルドカード:なぜこれはコンパイルされませんか?
- 20. これはなぜコンパイルされませんか?
- 21. このCコードはなぜコンパイルされますか?
- 22. このコードはなぜJavaでコンパイルされますか?
- 23. なぜこのコードはコンパイルされますか?
- 24. なぜこのC++はコンパイルされますか?
- 25. このC++プログラムはなぜコンパイルされますか?
- 26. C++なぜこのコードはコンパイルされますか?
- 27. 「ELSE:」はなぜvb.netでコンパイルされますか?
- 28. このテンプレートコードはなぜコンパイルされますか?
- 29. なぜこのコードはコンパイルされますか?
- 30. ブーストrtreeコードはコンパイルされません---なぜですか?
これはインポートされたモジュールで呼び出されていますか? –
'os.path.splitext(os.path.basename(__ file __))[0] + os.path.extsep +" py "' – zondo
おそらく '__file__'の初期値を変更することはできませんが、 'os.path.splitext()'を使ってファイル名から拡張します。 – martineau