string translate, replace, find and the forward slash

Discussion in 'Python' started by destroooooy, Apr 29, 2008.

  1. destroooooy

    destroooooy Guest

    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.
    destroooooy, Apr 29, 2008
    1. Advertisements

  2. 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.
    Arnaud Delobelle, Apr 29, 2008
    1. Advertisements

  3. destroooooy

    destroooooy Guest

    Oooh. Let me try it that way.
    destroooooy, Apr 29, 2008
  4. destroooooy

    destroooooy Guest

    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...
    destroooooy, Apr 29, 2008
  5. Do you mean maketrans() from the string module? I didn't know about
    it, but I've tried it and it works too:
    Arnaud Delobelle, Apr 29, 2008
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.