我对Python中处理路径的方式有点困惑。使用公共构造行“~”或“.”或“.”,我经常遇到路径不被识别为有效或不存在的情况,特别是当我将路径作为参数传递给shell命令时;但是如果我总是执行以下操作,我的所有问题都会消失:
some_path = os.path.abspath(os.path.expanduser(some_path))
这是一个惯用词还是一个惯用词?我真的应该期望在我有some_path
的地方,我应该在将上面的代码传递给任何(或至少是大多数)使用它做任何事情的函数之前拥有它吗?你知道吗
Tags:
是的,如果需要解析
$HOME
的绝对路径,就必须这样做。你知道吗如果您经常需要这个功能,那么编写一个简短的helper函数应该很容易。也有可用的路径帮助程序库,如下所示:
是的,您可以调用的大多数东西都期望通过该习惯用法运行的路径。当您在shell中使用这样的路径时(例如,当您执行
cat ~raxacoricofallapatorius/foo.txt
之类的操作时),执行路径规范化的是shell本身而不是cat
或任何其他可能运行的程序。你知道吗你可以简单地验证一下-例如
所以这意味着如果你希望得到一条以这些变量作为输入的路径,你需要自己做预处理。另一种方法是通过shell运行命令,并准备好处理带来的所有问题。你知道吗
但是,至少在类unix系统上(Windows的行为方式可能相同,也可能不同),对于
.
和..
您不需要这样做—这些都是系统调用所理解的,shell不会转换它们—因此,例如:注意,
file
看到..
没有改变,但是看到了~
的扩展形式。你知道吗这意味着,如果您只需要直接在外部程序中工作的路径,那么通过
expanduser
和expandvars
传递它就足够了。如果您要调用的程序运行在与您的不同的工作目录中,则主要需要调用abspath
。你知道吗一般来说这是个好主意。os.path.abspath路径将解析相对路径,如.,…,和~。如果你想让你的代码可以在操作系统间移植,你应该使用操作系统路径如果你能-操作系统路径始终指向您所在操作系统的正确路径模块。如果尝试定义自己的路径函数,则会丢失操作系统路径. 你知道吗
相关问题 更多 >
编程相关推荐