string translate, replace, find and the forward slash

Arnaud Delobelle arnodel at googlemail.com
Tue Apr 29 22:50:54 CEST 2008


destroooooy <destroooooy at gmail.com> writes:

> Hi folks,
>   I'm finding some (what I consider) curious behavior with the string
> methods and the forward slash character. I'm writing a program to
> rename mp3 files based on their id3 tags, and I want to protect
> against goofy characters in the in tags. So I do the following:
>
> unsafe_chars = "/#()[]!@$%^&*{}\'\"`?<>| \t\n"
> alt_chars       = "_________________________"
>
> s_artist.translate(maketranstable(unsafe_chars, alt_chars))
>
>
> which successfully replaces everything except for forward slashes (at
> least in the files I've tested so far). If I use the "replace()"
> method, it also does not work. Escaping the forward slash changes
> nothing. "find()" however, works, and thus I've resorted to:
>
> if "/" in s_artist:
>             (s_l, slash, s_r) = s_artist.partition("/")
>             s_artist = "_".join([s_l, s_r])
>
> which is rather uncool. It works but I'd just like to know what the
> deal is. TIA.

It works fine here:

marigold:junk arno$ python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> unsafe_chars = "/#()[]!@$%^&*{}\'\"`?<>| \t\n"
>>> table = range(256)
>>> for c in unsafe_chars: table[ord(c)] = ord('_')
... 
>>> table = ''.join(chr(o) for o in table)
>>> 'Jon(&Mark/Steve)'.translate(table)
'Jon__Mark_Steve_'
>>> 

-- 
Arnaud



More information about the Python-list mailing list