在Python中,确保可靠路径的最佳方法是什么?

2024-04-19 06:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python中处理路径的方式有点困惑。使用公共构造行“~”或“.”或“.”,我经常遇到路径不被识别为有效或不存在的情况,特别是当我将路径作为参数传递给shell命令时;但是如果我总是执行以下操作,我的所有问题都会消失:

some_path = os.path.abspath(os.path.expanduser(some_path))

这是一个惯用词还是一个惯用词?我真的应该期望在我有some_path的地方,我应该在将上面的代码传递给任何(或至少是大多数)使用它做任何事情的函数之前拥有它吗?你知道吗


Tags: path代码命令路径os地方方式情况
3条回答

是的,如果需要解析$HOME的绝对路径,就必须这样做。你知道吗

如果您经常需要这个功能,那么编写一个简短的helper函数应该很容易。也有可用的路径帮助程序库,如下所示:

是的,您可以调用的大多数东西都期望通过该习惯用法运行的路径。当您在shell中使用这样的路径时(例如,当您执行cat ~raxacoricofallapatorius/foo.txt之类的操作时),执行路径规范化的是shell本身而不是cat或任何其他可能运行的程序。你知道吗

你可以简单地验证一下-例如

lvc@tiamat:~/Projects$ echo ~
/home/lvc

所以这意味着如果你希望得到一条以这些变量作为输入的路径,你需要自己做预处理。另一种方法是通过shell运行命令,并准备好处理带来的所有问题。你知道吗

但是,至少在类unix系统上(Windows的行为方式可能相同,也可能不同),对于...您不需要这样做—这些都是系统调用所理解的,shell不会转换它们—因此,例如:

lvc@tiamat:~/Projects$ file ..
..: directory
lvc@tiamat:~/Projects$ file ~
/home/lvc: directory

注意,file看到..没有改变,但是看到了~的扩展形式。你知道吗

这意味着,如果您只需要直接在外部程序中工作的路径,那么通过expanduserexpandvars传递它就足够了。如果您要调用的程序运行在与您的不同的工作目录中,则主要需要调用abspath。你知道吗

一般来说这是个好主意。os.path.abspath路径将解析相对路径,如.,…,和~。如果你想让你的代码可以在操作系统间移植,你应该使用操作系统路径如果你能-操作系统路径始终指向您所在操作系统的正确路径模块。如果尝试定义自己的路径函数,则会丢失操作系统路径. 你知道吗

相关问题 更多 >