On Apr 29, 4:50 pm, Arnaud Delobelle <[EMAIL PROTECTED]> wrote: > destroooooy <[EMAIL PROTECTED]> 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 = "/#()[EMAIL PROTECTED]&*{}\'\"`?<>| \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 = "/#()[EMAIL PROTECTED]&*{}\'\"`?<>| \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
Okay, so that definitely works. Thanks! However, the chances of me coming up with that on my own were completely nonexistent, and I'd still like to know how one would use maketranstable() to get the same result... -- http://mail.python.org/mailman/listinfo/python-list