1

所以我刚刚为标题屏幕编写了这个类,它运行良好。但是,与我一起参与该项目的人之一提到我不应该使用:

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

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

进入超级目录。不过,他确实提到了一些关于 pythonpath 的事情。如果这有帮助,我们正在使用 Eclipse。

对于更多的上下文,我们正在制作一个多平台游戏,所以我们不能只同步我们的目录并对其进行硬编码(尽管我们使用 git,所以工作目录是同步的)。基本上,我需要一些方法从“src”文件夹中的脚本文件到它旁边的“媒体”文件夹(AKA 有一个超级(项目)文件夹,其中包含“src”和“媒体”文件夹) .

任何帮助将不胜感激,但请不要说“google it”,因为我在来这里之前尝试过(我不知道这是否经常发生,但我在其他地方见过太多次......当我用谷歌搜索答案时,对不起,如果我这么说听起来很混蛋)

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(): 将路径拆分为相对文件/文件夹名称和包含它的基本文件夹。使用它两次base_folder = ...将给出父目录。
  • os.path.join:独立于操作系统且正确的路径名组合。知道缺少或多个/s 或\s
于 2013-03-05T06:08:46.337 回答
0

考虑使用os.path.dirname()os.path.join()。这些应该以独立于平台的方式工作。

于 2013-03-05T05:57:33.853 回答