string translate, replace, find and the forward slash

destroooooy destroooooy at gmail.com
Tue Apr 29 17:16:33 EDT 2008


On Apr 29, 4:50 pm, Arnaud Delobelle <arno... at googlemail.com> wrote:
> destroooooy <destrooo... 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


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...



More information about the Python-list mailing list