0

我有一个棘手的问题要解决。我需要提取文件路径的特定部分。我在临时目录下提取了一个 zip 文件,其中包含该文件的完整路径。基本上我想要的是获得完整文件路径和临时路径之间的区别。下面我举个例子:

Fullpath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt

TempPath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\

所以我的预期结果是:

results = \\common\\test.txt

只是寻找一种简单的 Pythonic 方式来完成此任务。

4

3 回答 3

3

您可以使用os.path.relpath

os.path.relpath(Fullpath, TempPath)

或者您可以使用拆分:

Fullpath.split(TempPath)[1]

或者您可以将 commonprefix 与 replace 一起使用:

Fullpath.replace(os.path.commonprefix([Fullpath, TempPath]),'')

输出:

common\test.txt
于 2014-04-10T19:33:40.820 回答
0

一种不太可靠的方法是使用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:\users\test\appdata\local\temp\tempDir\

请注意,该函数对路径一无所知;这只是一个字符一个字符的交易

然后使用 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:\users\test\appdata\local\temp\tempDir\

但这仍然不能解决这样的情况:

Fullpath = 'c:\\users\\test\\..\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'

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

于 2014-04-10T19:36:54.700 回答
0
results = '\\' + Fullpath.replace(TempPath, '')

或者,如果您想确保删除字符串的开头:

import re
results = '\\' + re.sub('^%s' % TempPath, '', Fullpath)
于 2014-04-10T19:40:23.547 回答