Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > string translate, replace, find and the forward slash

Reply
Thread Tools

string translate, replace, find and the forward slash

 
 
destroooooy
Guest
Posts: n/a
 
      04-29-2008
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.

 
Reply With Quote
 
 
 
 
Arnaud Delobelle
Guest
Posts: n/a
 
      04-29-2008
destroooooy <(E-Mail Removed)> 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
 
Reply With Quote
 
 
 
 
destroooooy
Guest
Posts: n/a
 
      04-29-2008
On Apr 29, 4:50 pm, Arnaud Delobelle <(E-Mail Removed)> wrote:
> destroooooy <(E-Mail Removed)> 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.
 
Reply With Quote
 
destroooooy
Guest
Posts: n/a
 
      04-29-2008
On Apr 29, 4:50 pm, Arnaud Delobelle <(E-Mail Removed)> wrote:
> destroooooy <(E-Mail Removed)> 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...
 
Reply With Quote
 
Arnaud Delobelle
Guest
Posts: n/a
 
      04-29-2008
destroooooy <(E-Mail Removed)> writes:

> On Apr 29, 4:50 pm, Arnaud Delobelle <(E-Mail Removed)> wrote:
>>
>> 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...


Do you mean maketrans() from the string module? I didn't know about
it, but I've tried it and it works too:

>>> import string
>>> unsafe_chars = "/#()[]!@$%^&*{}\'\"`?<>| \t\n"
>>> alt_chars = "_________________________"
>>> table = string.maketrans(unsafe_chars, alt_chars)
>>> "a/b/c".translate(table)

'a_b_c'
>>>


--
Arnaud
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
RequestDispatcher and usage of forward slash harryos Java 2 12-17-2008 01:30 AM
DocumentBuilder object is not able to parse a XML String which has a nodename which contains forward slash! Ed Java 6 08-02-2007 03:29 PM
What's the forward slash for at the end of a URL? xyZed HTML 3 03-04-2006 09:00 AM
IE6 inserts forward slash at end of URL so image htm Richard Wright Computer Support 0 03-20-2005 08:13 PM
trailing slash issue in Find.find Jeff Mitchell Ruby 0 08-23-2003 11:30 PM



Advertisments