获取文件路径特定部分的最简单方法



我有一个棘手的问题需要解决。我需要提取文件路径的特定部分。我在一个临时目录下提取了一个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'

在解析之前需要解析完整的绝对路径名。

相关内容

  • 没有找到相关文章

最新更新