我在文件中有一行: '一些文字/一些/路径' 路径可以是相对的也可以是绝对的。我想用绝对路径替换它。 我试过这个:
re.sub('some text (.*)','some text {}'.format(os.path.abspath(r'\1')),line)
但是,匹配的字符串被视为没有任何路径的文件名,结果字符串是 /路径/到/与/文件//一些/路径
基本上它是' path / to / the / file /' +' matched_string'相对和绝对路径。 如果我在re.sub之外使用os.path.abspath,它会给出正确的路径。
我该如何解决这个问题?
谢谢, 伊万
答案 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