PDA

Pogčedajte punu verziju : Python string replace


cvele
28. 10. 2011., 11:14
Pitanje za one-liner pythonovce :)
Imam kod koji izgleda otprilike ovako:

#paths je tuple
fixed_paths = []
for path in paths:
if path[:1] == '\\':
path = path.replace("\\", "", 1)
fixed_paths.append(path)
paths = tuple(fixed_paths)

Dakle sve sto treba da uradi je zameni backslash u svakom clanu ukoliko se backslash nalazi na prvom mestu i vrati tuple tako modifikovanih stringova

Verujem da ovo moze da se izvede znatno elegantnije, neke ideje isl ?

Cela ideja ovoga se vrti oko problema koji imam sa os.path.join.
Nemam potpunu kontrolu nad njegovim inputom dako da recimo mogu da dobijem

os.path.join("c:\download", "c:\download\movies\", "\fantasy\")

sto ce da mi vrati samo \fantasy\, dok bi ocekivao c:\download\movies\fantasy\

Da li postoji neko elegantno resenje za ovaj problem?
Mislio sam da od svakog sledeceg argumenta oduzmem sve predhodne ukoliko on pocinje sa njima. To bi me pokrpilo ali mi se idalje cini kao budz.

jablan
28. 10. 2011., 12:57
Možda

paths = tuple([re.sub(r'^\\', '', x) for x in paths])
?

cvele
28. 10. 2011., 13:49
Da to bi resilo ovaj prvi deo, imas li neku ideju za deo vezan za apsolutne putanje ?

Recimo vako, nisam testirao:

replacements = []
fpaths = []
for path in paths:
if len(replacements)>0:
for replacement in replacements:
path = re.sub(r'^{}'.format(replacement), '', path)
fpaths.append(path)
replacements.append(path)

?

jablan
28. 10. 2011., 13:55
Koliko ja kontam http://docs.python.org/library/os.path.html#os.path.join on bi trebalo da radi ok za tvoj primer (možda nakon što ubiješ beksleš pre "fantasy"). Pomoglo bi kad bi tačno naveo šta dobijaš kao input i šta očekuješ kao output.

cvele
28. 10. 2011., 14:05
npr imam input
('C:\\Users\\Vladimir Cvetic\\Downloads', 'C:\\Users\\Vladimir Cvetic\\Downloads\\text.txt')

ocekivao bi C:\\Users\\Vladimir Cvetic\\Downloads\\text.txt

ili

('C:\\Users\\Vladimir Cvetic\\Downloads', 'C:\\Users\\Vladimir Cvetic\\Downloads\\text', 'text.txt')

ocekivao bi C:\\Users\\Vladimir Cvetic\\Downloads\\text\\text.txt

jablan
28. 10. 2011., 14:21
...startuje piratski WinXP VM...
...skida Python za win...
...instalira Python za win...

Jbmliga, kod mene radi ok...

cvele
28. 10. 2011., 14:33
Hmm cudno, pogledacu fala na cimanju :)