如何在Python中分离路径中的文件名?

2 投票
1 回答
5556 浏览
提问于 2025-04-15 23:21

我有一堆文件,看起来像这样:

输入

/foo/bar/baz/d4dc7c496100e8ce0166e84699b4e267fe652faeb070db18c76669d1c6f69f92.mp4
/foo/baz/bar/60d24a24f19a6b6c1c4734e0f288720c9ce429bc41c2620d32e01e934bfcd344.mp4
/bar/baz/foo/cd53fe086717a9f6fecb1d0567f6d76e93c48d7790c55e83e83dd1c43251e40e.mp4

我想从这些文件的路径中提取出文件名,同时保留路径和文件名。

输出

['/foo/bar/baz/', 'd4dc7c496100e8ce0166e84699b4e267fe652faeb070db18c76669d1c6f69f92.mp4']
['/foo/baz/bar/', '60d24a24f19a6b6c1c4734e0f288720c9ce429bc41c2620d32e01e934bfcd344.mp4']
['/bar/baz/foo', 'd53fe086717a9f6fecb1d0567f6d76e93c48d7790c55e83e83dd1c43251e40e.mp4']

我该怎么做呢?

谢谢!

1 个回答

17

os.path.split 正好满足你的需求,我来给你解释一下...:

os.path.split(path)

这个函数会把一个路径分成两部分,分别叫做 head 和 tail。tail 是路径的最后一部分,而 head 是在这之前的所有部分。tail 里不会有斜杠;如果路径最后有斜杠,tail 就会是空的。如果路径里没有斜杠,head 就会是空的。如果路径本身是空的,那么 head 和 tail 都是空的。尾部的斜杠会从 head 中去掉,除非它是根路径(也就是只有一个或多个斜杠)。在几乎所有情况下,把 head 和 tail 重新组合起来会得到原来的路径(唯一的例外是当 head 和 tail 之间有多个斜杠时)。

所以,假设你有一个完整路径的列表(比如叫 paths),

split_paths = [os.path.split(p) for p in paths]

这应该正好是你想要的元组列表。如果你有特别的原因想要一个列表的列表,而不是自然的元组列表,这也不难做到:

split_paths_as_lists = [list(os.path.split(p)) for p in paths]

撰写回答