2017-10-25 5 views
0

Ich habe eine Zeile in der Datei: 'einige Text/einige/Pfad' wo Pfad kann sowohl relative oder absolute sein. Ich möchte es durch einen absoluten Pfad ersetzen. Ich versuchte dies:Python: re mit os.path.abspath

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

jedoch der gefundene String als Dateinamen ohne Pfad zu sehen ist und die resultierende Zeichenfolge /path/to/die/Datei // some/path

Im Grunde ist es ist 'path/to/the/file /' + 'matched_string' sowohl für relative als auch für absolute Pfade. Wenn ich os.path.abspath außerhalb von re verwenden, gibt es den richtigen Pfad.

Wie kann ich das beheben?

#!/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)) 

... richtig als Ausgabe emittiert:

Danke, Ivan

+0

Sie rufen 'abspath()' auf der wörtlichen str ing '' 1 '', was wahrscheinlich nichts Nützliches bewirkt. Wahrscheinlich möchten Sie es auf das Ergebnis von 're()' anwenden. – jasonharper

Antwort

2

Wenn Sie eine Funktion als Ersatz re.sub passieren, wird diese Funktion mit dem Match-Objekt als Argument aufgerufen werden (auf MacOS, wo /tmp ist ein symbolischer Link auf /private/tmp):

some text /private/tmp 
+0

Das hat funktioniert, danke. – Ivan

+0

@Ivan, froh zu hören - überlege, ob du das Kästchen neben der Antwort anklickst, um deine Frage zu markieren. –