使用代码存储库时如何引用资源的相对路径

我们正在使用一个代码存储库,该代码存储库同时部署到Windows和Linux中-有时位于不同的目录中。项目内部的模块之一应如何引用项目中的非Python资源之一(CSV文件等)?


如果我们做类似的事情:


thefile=open('test.csv')

要么:


thefile=open('../somedirectory/test.csv')

仅当从一个特定目录或目录的一部分运行脚本时,此脚本才有效。


我想做的是这样的:


path=getBasePathOfProject()+'/somedirectory/test.csv'

thefile=open(path)

可能吗?


慕容708150
浏览 618回答 3
3回答

繁华开满天机

尝试使用相对于当前文件路径的文件名。“ ./my_file”的示例:fn = os.path.join(os.path.dirname(__file__), 'my_file')在Python 3.4+中,您还可以使用pathlib:fn = pathlib.Path(__file__).parent / 'my_file'

慕少森

我经常使用与此类似的东西:import osDATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'datadir'))# if you have more paths to set, you might want to shorten this ashere = lambda x: os.path.abspath(os.path.join(os.path.dirname(__file__), x))DATA_DIR = here('datadir') pathjoin = os.path.join# ...# later in scriptfor fn in os.listdir(DATA_DIR):    f = open(pathjoin(DATA_DIR, fn))    # ...变量__file__保存您在其中编写该代码的脚本的文件名,因此您可以创建相对于脚本的路径,但仍使用绝对路径编写。由于以下几个原因,它运行良好:路径是绝对的,但仍然是相对的该项目仍可以部署在相对的容器中但是您需要注意平台兼容性-Windows的os.pathsep与UNIX不同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python