在Python中查找文件当前目录的最佳方式

5

我正在寻找一个替代方案来

import os
package_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(package_dir,'foo.csv')

我的工作路径与文件路径不同。因此,当我想要加载一个文件时,我需要一种方法来生成相对于我的工作目录的路径。

我想要更新到pathlib(或其他类似的工具)。但是,有什么更好的方法可以做到这一点呢?

我找到了https://dev59.com/QXA65IYBdhLWcg3wogEb#44188489,但我认为这个解决方案并不比我的当前方法更好。

备注:

这不是How to properly determine current script directory?的复制,因为我明确地问了最好的方法。在其他帖子中的大多数解决方案看起来都不太好,或者已经在我的问题中提到了。该解决方案

Path(__file__).with_name("foo.csv")

这里给出的解决方案比其他问题中给出的解决方案更好,因为它易于理解,并且是解决它的一种真正pythonic的方式。如果这个问题是一个重复的问题,在另一篇文章中也会有同样好的答案。


你的第一行看起来完全没问题。我认为你不需要其中的os.path.abspath部分。至于pathlib,它在你有路径后才会发挥作用。它只是处理文件路径的更智能的方式。因此,它使第二行更容易编写,但对第一行并没有太大帮助。 - Paritosh Singh
你为什么想要进行改变?你当前的解决方案有哪些不足之处? - John Gordon
1
当前的操作系统版本比较老旧。Pathlib 的发明是为了替代大部分 os. 功能。 这就是为什么我正在寻找一种使用 Pathlib 实现相同功能的新方法。也许有一种更加舒适的解决方案,比当前的解决方案更好。 - subjord
1个回答

9
如果您想使用 pathlib 实现相同的功能,代码可能如下所示:
from pathlib import Path

package_dir = Path(__file__).parent.absolute()
file_path = package_dir.joinpath("foo.csv")

除非你正在改变当前工作目录,否则你可能并不真正需要或者想使用.absolute()

如果你实际上不需要知道package_dir会是什么,你也可以直接获取file_path

file_path = Path(__file__).with_name("foo.csv").absolute()

这将为您提供新的路径,替换文件名。


我必须承认,我真的很喜欢pathlib,我认为它可以显著地简化整个文件处理过程。 - Ondrej K.
@subjord 你能否具体说明问题的性质?我们可以尝试找到解决方案并相应地改进答案。 - Ondrej K.
错误信息是什么?.with_name()在游戏后期似乎没有出现过。__file__在交互式Python会话中不起作用,因为它未定义。因此,我很好奇是否有其他应该被提到/记录的陷阱被忽略了。 - Ondrej K.
如果在 .with_name("") 括号中的字符串中包含反斜杠,则会出现以下错误消息:raise ValueError("Invalid name %r" % (name)) - subjord
我指的是方便的一行解决方案 file_path = Path(__file__).with_name("foo.csv") - subjord
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接