从文件路径中去除文件名(仅当路径指向一个文件时)

4
问题实际上很简单,但我在想是否有一种特别优雅的方法可用于解决我忽略的问题。
假设我获得一个路径(例如通过控制台输入从用户那里获得),该路径可以指向目录或文件,例如以下之一:
/directory1/directory2/file.txt
/directory1/directory2

现在我想编写一段代码,从路径末尾剥离出潜在的文件名,但是目录名,以便在示例中这两个路径都可以简化为/directory1/directory2
  • 我考虑过os.path.dirname,但它总是会剥离掉最后一个路径组件,即使它是一个目录
  • 显而易见的解决方案是使用os.path.isdiros.path.isfile并有条件地进行剥离
  • 我想知道的是:是否有更短的版本可用,比如os.path.closest_dirname
    这里可能让我感到困扰的是,os.path.dirname并不返回最近的目录,而是始终返回父目录(即类似于os.path.parentdir

文件名是否保证以 .format 结尾? - PYA
这个答案可能会有所帮助:https://dev59.com/tmsz5IYBdhLWcg3wmpH0 - Daniel Corin
1
@Prith:不,我只是为了清晰度而添加它(这样很明显它指的是一个文件)。我认为仅查看名称时存在歧义也是os.path.dirname起作用的原因... - Patrick Storz
3个回答

2

os.path 中似乎没有直接提供你所需功能的方法。

不过,我认为以下代码并没有太大问题:

print(path if os.path.isdir(path) else os.path.dirname(path))

它并没有真正解决问题,但似乎这是最简单的选择,即使在我提出的问题中可能看起来有点不太优雅。如果Python就是这样设计的,我们可能必须接受它... - Patrick Storz

0

我会使用parts而不是parents

from pathlib import Path

def foo(path):
    p = Path(path)
    return p.parts[-1]    # returns last part of path which is stripped filename

0

这应该适用于最小化的Python分发:

import os

def filefn(absfn):
  return absfn.split(os.path.sep)[-1]

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