Python:带有os.path.abspath的re.sub

时间:2017-10-25 23:25:29

标签: python os.path

我在文件中有一行: '一些文字/一些/路径' 路径可以是相对的也可以是绝对的。我想用绝对路径替换它。 我试过这个:

re.sub('some text (.*)','some text {}'.format(os.path.abspath(r'\1')),line)

但是,匹配的字符串被视为没有任何路径的文件名,结果字符串是 /路径/到/与/文件//一些/路径

基本上它是' path / to / the / file /' +' matched_string'相对和绝对路径。 如果我在re.sub之外使用os.path.abspath,它会给出正确的路径。

我该如何解决这个问题?

谢谢, 伊万

1 个答案:

答案 0 :(得分:2)

如果将函数作为替换传递给re.sub,则将使用匹配对象作为参数调用该函数:

#!/usr/bin/env python

import os, re

os.chdir('/tmp/')
line='some text .'

print(re.sub('some text (.*)',
             lambda match: 'some text {}'.format(os.path.abspath(match.group(1))),
             line))

...正确地作为输出发出(在MacOS上,其中/tmp/private/tmp的符号链接):

some text /private/tmp