如何从Python中删除文件名中的前缀?

时间:2017-04-11 01:33:37

标签: python

我想编写一个脚本,该脚本接收目录的路径和该目录中包含的文件的路径(可能嵌套很多目录)并返回相对于外部目录的该文件的路径。

例如,如果外部目录为/home/hugomg/foo且内部文件为/home/hugomg/foo/bar/baz/unicorns.txt,我希望脚本输出bar/baz/unicorns.txt

现在我正在使用realpath和字符串操作:

import os

dir_path = "/home/hugomg/foo"
file_path = "/home/hugomg/foo/bar/baz/unicorns.py"

dir_path = os.path.realpath(dir_path)
file_path = os.path.realpath(file_path)

if not file_path.startswith(dir_path):
    print("file is not inside the directory")
    exit(1)

output = file_path[len(dir_path):]
output = output.lstrip("/")
print(output)

但是有更强大的方法吗?我不相信我目前的解决方案是正确的方法。使用startwith和realpath一起使用正确的方法测试一个文件是否在另一个文件中?有没有办法避免使用我可能需要删除的主要斜线的那种尴尬局面?

1 个答案:

答案 0 :(得分:1)

您可以使用commonprefix模块的relpathos.path来查找两条路径的最长公共前缀。始终首选使用realpath

import os
dir_path = os.path.realpath("/home/hugomg/foo")
file_path = os.path.realpath("/home/hugomg/foo/bar/baz/unicorns.py")
common_prefix = os.path.commonprefix([dir_path,file_path])

if common_prefix != dir_path:
    print("file is not inside the directory")
    exit(1)
print(os.path.relpath(file_path, dir_path))

输出:

bar/baz/unicorns.txt