Geht das auch schneller oder besser?
Code: Alles auswählen
import re
s="C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
for i,j in zip([" ",r"\\","\+"],["_",r"\\\\","-"]):s=re.sub(i,j,s)
print s
Code: Alles auswählen
import re
s="C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
for i,j in zip([" ",r"\\","\+"],["_",r"\\\\","-"]):s=re.sub(i,j,s)
print s
Dass das für Python eine korrektes String-Literal ist, finde ich eigenwillig. Bei Compilern/Interpretern anderer Sprachen wird man zumindest mit einem Warning darauf aufmerksam gemacht, dass es die Escape-Sequenzen \D, \A und \H nicht gibt.HarryH hat geschrieben:Code: Alles auswählen
s="C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
Code: Alles auswählen
s="C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
replacedict = {" ":"_", "\\":"\\\\", "+":"-"}
s = "".join(map(lambda x: rd.get(x,x), s))
Code: Alles auswählen
s = "".join([rd.get(x,x) for x in s])
Code: Alles auswählen
import re
from time import *
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
for i,j in zip([" ",r"\\","\+"],["_",r"\\\\","-"]):s=re.sub(i,j,s)
zeit2=clock()
erg=zeit2-zeit1
print "1.Beispiel: Laufzeit = %.3f Sekunden" % erg
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
for t in ((" ","_"),("\\","\\\\"),("+","-")): s = s.replace(*t)
zeit2=clock()
erg=zeit2-zeit1
print "2.Beispiel: Laufzeit = %.3f Sekunden" % erg
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
rd = {" ":"_", "\\":"\\\\", "+":"-"}
s = "".join(map(lambda x: rd.get(x,x), s))
zeit2=clock()
erg=zeit2-zeit1
print "3.Beispiel: Laufzeit = %.3f Sekunden" % erg
Code: Alles auswählen
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
s = s.replace(" ", "_")
s = s.replace("\\", "\\\\")
s = s.replace("+", "-")
Code: Alles auswählen
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
s = s.replace(" ", "_").replace("\\", "\\\\").replace("+", "-")
Kann ich nicht bestätigen.Dookie hat geschrieben:folgende Methode dürfte wohl die schnellste Variante sein:
Code: Alles auswählen
from time import *
for _ in range(10):
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
s = s.replace(" ", "_")
s = s.replace("\", "\\\")
s = s.replace("+", "-")
zeit2=clock()
erg=zeit2-zeit1
laufzeit = "%.3f / " % erg
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
for t in ((" ","_"),("\","\\\"),("+","-")): s = s.replace(*t)
zeit2=clock()
erg=zeit2-zeit1
laufzeit += "%.3f / " % erg
zeit1=clock()
s=100000*"C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"
s = s.replace(" ", "_").replace("\", "\\\").replace("+", "-")
zeit2=clock()
erg=zeit2-zeit1
laufzeit += "%.3f" % erg
print laufzeit
Code: Alles auswählen
import re
from time import *
sl=100000*["C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"]
zeit1=clock()
for s in sl:
for i,j in zip([" ",r"\\","\+"],["_",r"\\\\","-"]):s=re.sub(i,j,s)
zeit2=clock()
erg=zeit2-zeit1
print "1.Beispiel: Laufzeit = %.3f Sekunden" % erg
sl=100000*["C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"]
zeit1=clock()
for s in sl:
for t in ((" ","_"),("\\","\\\\"),("+","-")): s = s.replace(*t)
zeit2=clock()
erg=zeit2-zeit1
print "2.Beispiel: Laufzeit = %.3f Sekunden" % erg
sl=100000*["C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"]
zeit1=clock()
for s in sl:
s = s.replace(" ", "_").replace("\\", "\\\\").replace("+", "-")
zeit2=clock()
erg=zeit2-zeit1
print "3.Beispiel: Laufzeit = %.3f Sekunden" % erg
sl=100000*["C:\Dokumente und Einstellungen\All Users\Dokumente\Hinz+Kunz"]
zeit1=clock()
for s in sl:
s = s.replace(" ", "_")
s = s.replace("\\", "\\\\")
s = s.replace("+", "-")
zeit2=clock()
erg=zeit2-zeit1
print "4.Beispiel: Laufzeit = %.3f Sekunden" % erg
Code: Alles auswählen
fritz@seneca:~/Python/Beispiele$ python replacetest.py
1.Beispiel: Laufzeit = 9.250 Sekunden
2.Beispiel: Laufzeit = 1.510 Sekunden
3.Beispiel: Laufzeit = 1.120 Sekunden
4.Beispiel: Laufzeit = 1.170 Sekunden
fritz@seneca:~/Python/Beispiele$ python replacetest.py
1.Beispiel: Laufzeit = 10.020 Sekunden
2.Beispiel: Laufzeit = 1.570 Sekunden
3.Beispiel: Laufzeit = 1.200 Sekunden
4.Beispiel: Laufzeit = 1.250 Sekunden
fritz@seneca:~/Python/Beispiele$ python replacetest.py
1.Beispiel: Laufzeit = 9.740 Sekunden
2.Beispiel: Laufzeit = 1.590 Sekunden
3.Beispiel: Laufzeit = 1.190 Sekunden
4.Beispiel: Laufzeit = 1.280 Sekunden
Das ist natürlich eine ganz andere Aufgabenstellung:Dookie hat geschrieben:Ich hab jetzt mal das Beispiel so verändert, daß nicht ein megalanger String sonder 100000 "normallange" Strings bearbeitet werden. So werden die Unterschiede noch deutlicher.
Code: Alles auswählen
tpls = ((" ","_"),("\","\\\"),("+","-"))
for s in sl:
for t in tpls: s = s.replace(*t)
Code: Alles auswählen
ttbl = string.maketrans(" +","_-")
for s in sl:
s = s.translate(ttbl)
s = s.replace("\", "\\\")