string translate, replace, find and the forward slash

destroooooy destroooooy at gmail.com
Tue Apr 29 16:56:29 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


Oooh. Let me try it that way.



More information about the Python-list mailing list