Zu meiner kleinen Funktion hier:
http://python.sandtner.org/viewtopic.php?p=12528#12528
währe es doch schön, wenn in Pfadangaben automatisch Pfad-Platzhalter aufgelöst werden würden.
Bsp.:
"%SystemRoot%\\System32\\"
Gibt es dafür das fertiges in pure Python?
Ich denk frag mal, bevor ich selber anfange zu basteln Mit os.environ kommt man ja an alles dran, müßte man nur noch ersetzten...
Windows Systemvariablen in Pfade auflösen...
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi jens,
versuch mal
print os.path.expandvars("%SystemRoot%\\System32\\")
eventuell musst du vorher das
%name% in ein ${name} wandeln,
das geht mit
re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32\\")
Gruß
Dookie
versuch mal
print os.path.expandvars("%SystemRoot%\\System32\\")
eventuell musst du vorher das
%name% in ein ${name} wandeln,
das geht mit
re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32\\")
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- User
- Beiträge: 34
- Registriert: Samstag 24. Juli 2004, 19:25
- Kontaktdaten:
bei mir klappts nicht dookie
würde das so machen:
alternativ als einzeiler:
würde das so machen:
Code: Alles auswählen
import os,re
def _replsysvars(a):
var=a.group("var").upper() #upper wichtig, in os.environ sind alle keys groß geschrieben
return os.environ[var] #hier könnte man noch ein verhalten machen wenns die systemvariable nicht gibt
def replacesysvars(s):
return re.sub("%(?P<var>\w+)%", _replsysvars, s)
Code: Alles auswählen
re.sub("%(?P<var>\w+)%", lambda r: os.environ[r.group("var").upper()], "%SystemRoot%\\System32\\")
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Verstehe ich nicht...Sorgenkind hat geschrieben:bei mir klappts nicht dookie
Code: Alles auswählen
print os.path.expandvars( re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32") )
-
- User
- Beiträge: 34
- Registriert: Samstag 24. Juli 2004, 19:25
- Kontaktdaten:
Code: Alles auswählen
>>> print os.path.expandvars( re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32\\") )
D:\WINDOWS\System32\
Hi,
Habe die obigen Infos mal zu einer Funktion zusammengeschlossen und noch etwas verbessert.
Falls z.B. eine Pfadname zwei Prozentzeichen enthält, diese Kombination aber keine Variable darstellt, werden diese nun bei meiner Funktion richtigerweise ignoriert. Dadurch wird vermieden, das sie durch "os.path.expandvars" falsch ausgewertet werden.
Hier die Funktion:
Habe die obigen Infos mal zu einer Funktion zusammengeschlossen und noch etwas verbessert.
Falls z.B. eine Pfadname zwei Prozentzeichen enthält, diese Kombination aber keine Variable darstellt, werden diese nun bei meiner Funktion richtigerweise ignoriert. Dadurch wird vermieden, das sie durch "os.path.expandvars" falsch ausgewertet werden.
Hier die Funktion:
Code: Alles auswählen
def ExpandOsVars(name):
"""
Return the argument with environment variables (os.environ) expanded.
Substrings of the form "%var%", "$var" or "${var}" are replaced by the
value of environment variable name.
"""
def testvar(matchobj):
if matchobj.group(1) in os.environ:
return "$" + matchobj.group(1)
else:
return matchobj.group(0)
return os.path.expandvars(re.sub('%(?P<name>\w+)%', testvar, name))
Gruß, Harry