1

そのため、このクラスをタイトル画面用にコーディングしたところ、うまく機能します。ただし、プロジェクトで一緒に働いている人の 1 人は、使用すべきではないと述べました。

os.chdir(os.getcwd() + "/..")

resource = (os.getcwd() + "/media/file name")

スーパーディレクトリに移動します。しかし、彼はpythonpathについて何か言及しました。これが役立つ場合は、Eclipseを使用しています。

詳細については、マルチプラットフォーム ゲームを作成しているため、ディレクトリを同期してハードコードすることはできません (ただし、git を使用しているため、作業ディレクトリは同期されています)。基本的に、「src」フォルダー内のスクリプト ファイルから、その隣にある「media」フォルダーに移動する方法が必要です (別名、「src」フォルダーと「media」フォルダーの両方を含むスーパー (プロジェクト) フォルダーがあります)。 .

どんな助けでも大歓迎ですが、ここに来る前に試したので、「ググって」と言わないでください(ここでよくあることかどうかはわかりませんが、他の場所で何度も見ました...私が答えをグーグルで検索したとき、それを言うのがぎこちなく聞こえたらごめんなさい)

4

3 に答える 3

2

Python プログラムには、通常、スクリプトが実行されたディレクトリである現在の作業ディレクトリの概念があります。これは、相対パスを使用して「ファイルを探す場所」です。

ただし、プログラムは にあるフォルダとは別のフォルダから実行できるため、参照ディレクトリは代わりにスクリプトがあるディレクトリを参照する必要があります(一般に、現在のディレクトリはスクリプトの場所とは関係ありません。 )。スクリプトが見つかったディレクトリは、次のコマンドで取得されます

script_dir = os.path.dirname(__file__)

このパスは相対 (場合によっては空) にすることができるため、スクリプトの現在の作業ディレクトリが、スクリプトが Python インタープリターによって読み取られたとき (__file__が設定されているとき) のディレクトリと同じであることが依然として重要です。現在の作業ディレクトリがコードの後半で変更された場合は、相対script_dirパスを絶対パスに変換することが重要です。

# If script_dir is relative, the current working directory is used, here. This is correct if the current
# working directory is the same as when the script was read by the Python interpreter (which is
# when __file__ was set):
script_dir = os.path.abspath(script_dir)

media次に、プラットフォームに依存しない親ディレクトリのディレクトリにアクセスできます

os.path.join(script_dir, os.path.pardir, 'media')

実際os.path.pardir(または同等os.pardir) は、プラットフォームに依存しない親ディレクトリの規則でありos.path.join()、プラットフォームに依存しない方法でパスを結合するだけです。

于 2013-03-05T07:56:26.367 に答える
1

次のようなものをお勧めします:

import os.path

base_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
media_folder = os.path.join(base_folder, "media")
src_folder = os.path.join(base_folder, "src")

resource = os.path.join(media_folder, "filename")

for path in [base_folder, media_folder, src_folder, resource]:
    print path

主な成分は次のとおりです。

  • __file__sys.argv[0]: 現在のソース ファイルへのパスを取得します (呼び出されたスクリプトのパスを与えるとは異なります)。
  • os.path.split(): パスを相対ファイル/フォルダー名とそれを含むベース フォルダーに分割します。のように 2 回使用するbase_folder = ...と、親ディレクトリが得られます。
  • os.path.join: OS に依存しない正しいパス名の組み合わせ。の欠落または複数/の やを認識している\
于 2013-03-05T06:08:46.337 に答える
0

os.path.dirname()と の使用を検討してくださいos.path.join()。これらは、プラットフォームに依存しない方法で動作するはずです。

于 2013-03-05T05:57:33.853 に答える