lrcgfのブログ

趣味としてプログラミングを始めたので、そのあたりの話を中心に書いていくつもりです。

pygameでdataファイルのpath指定

(python3.3, pygame1.9.2)
pygameで例えばイメージファイルを読み込むとき絶対パス相対パスの両方が使えるはず。

# 絶対パスからファイルを開く
pythonImg_1 = pygame.image.load('絶対パス') 
# 相対パスからファイルを開く
pythonImg_2 = pygame.image.load('image.png') 

なのに、pythonImg_2の方ではcouldn't open python.pngと怒られてしまう(もちろん画像ファイルはプログラムソースと同じフォルダ、例えばfolder1においている)。何故?と思って色々試してみると、親フォルダ名を付け足せばうまくいった。

pythonImg_2 = pygame.image.load('folder1\image.png')

念のためpathを取得するソース追加してみる。

import os
path = os.path.abspath( __file__ )
print(path)

きちんとfolder1の下にソースコードsample.pyがあった。どういうことだろう?
とりあえず、相対パスで指定するときは親フォルダから書くか、次のようにして絶対パスに書き直しておくことにする。

import os
main_path = os.path.dirname(os.path.abspath( __file__ ))
file_path = os.path.join(main_path, 'image.png')
pythonImg = pygame.image.load(file_path)

パスをつなげるのにos.path.joinを使った理由は、公式にcompatibilityのためにそうしろと書いてあったから。

理由が分からない挙動はすごく困る...自分の大ポカな予感がするけど。