为什么要将os.path.join用于相对路径?

时间:2019-10-20 20:52:09

标签: python

我有一个项目,其中有几个目录:项目,设置,资源。在这些目录中打开文件的最佳实践是什么。

现在我正在做

with open(f'./Projects/{project_name}/project.txt', 'r') as f:
    ...

我已经看到很多人推荐这样的东西:

projects_path = os.path.abspath(os.path.dirname(__file__))
project_path = os.path.join(projects_path, f'{project_name}/project.txt')
with open(project_path, 'r') as f:
    ...

使用第二种方法比第一种方法有什么好处?最佳做法是什么?

3 个答案:

答案 0 :(得分:3)

第二个片段应该是

os.path.join(projects_path, project_name, ‘projects.txt’)

有什么好处?可移植性。您的代码可以更轻松地在不同的操作系统上运行,因为Windows路径与* nix路径完全不同,但是此代码段仍可同时在两个操作系统上运行。

这取决于您是否需要代码真正跨平台。

此外,绝对路径使您的代码无论安装在哪里或在哪里运行都可以正常工作。当前工作目录可能没有“ Projects”文件夹,因为它是作为Shell脚本执行的,位于/ usr / local / bin文件夹中。

通常,对任何相对路径进行硬编码都会产生易碎代码,因为现在您需要诸如“需要在(特定目录)中安装此”之类的指令。稳健代码始终比易碎代码更好。

答案 1 :(得分:0)

大多数人建议这样做的唯一原因是,如果您要访问的文件都具有相同的根文件夹(即projects_path),则不必每次都键入该文件。后者是最佳做法。

答案 2 :(得分:0)

with open('passy.txt','r') as b: pass_check=b.readlines() for i in range(len(pass_check)): pname.append(i) passlength=int(len(pname)) for i in range(passlength): if passvalid == passlength[i]: print("Password is correct") break else: print("Password isn't correct") 使您从操作系统之间的差异中抽象出来。

使用os.path。*,您可以运行代码而无需担心操作系统。