我有一个棘手的问题需要解决。我需要提取文件路径的特定部分。我在一个临时目录下提取了一个zip文件,并拥有该文件的完整路径。从本质上讲,我想要的是获得完整文件路径和临时路径之间的区别。让我举一个例子如下:
Fullpath = c:\users\test\appdata\local\temp\tempDir\common\test.txt
TempPath = c:\users\test\appdata\local\temp\tempDir\
因此,我的预期结果是:
results = \common\test.txt
只是在寻找一种简单的、Python式的方式来实现这一点。
您可以使用os.path.relpath:
os.path.relpath(Fullpath, TempPath)
或者你可以使用拆分:
Fullpath.split(TempPath)[1]
或者您可以使用带有replace的commonprefix作为:
Fullpath.replace(os.path.commonprefix([Fullpath, TempPath]),'')
输出:
commontest.txt
results = '\' + Fullpath.replace(TempPath, '')
或者,如果你想确保删除字符串的开头:
import re
results = '\' + re.sub('^%s' % TempPath, '', Fullpath)
一种不完全健壮的方法是使用os.path.commonprefix:
import os
Fullpath = 'c:\users\test\appdata\local\temp\tempDir\common\test.txt'
TempPath = 'c:\users\test\appdata\local\temp\tempDir\'
print os.path.commonprefix([Fullpath, TempPath])
# c:userstestappdatalocaltemptempDir
意识到函数对路径一无所知;这只是一笔一笔的交易。
然后使用str.partition获取您感兴趣的部分:
>>> print Fullpath.partition(os.path.commonprefix([Fullpath, TempPath]))
('', 'c:\users\test\appdata\local\temp\tempDir\', 'common\test.txt')
如果你有这样的情况:
Fullpath = 'c:\users\test\appdata\local\temp\tempDir\common\test.txt'
TempPath = 'c:\users\test\appdata\local\temp\tempDir\co'
最好用os.path.dirname 包装通用前缀
>>> os.path.dirname(os.path.commonprefix([Fullpath, TempPath]))
c:userstestappdatalocaltemptempDir
但这仍然不能解决这样的情况:
Fullpath = 'c:\users\test\..\test\appdata\local\temp\tempDir\common\test.txt'
在解析之前需要解析完整的绝对路径名。