[Tutor] escape-quoting strings

Marilyn Davis marilyn at deliberate.com
Sun Oct 31 22:53:42 CET 2004


Hi Python Tutors,

I'm having a devil of a time quoting strings properly for MySql.

The string is fed to me on the command line from my Mail Transfer
Agent.  In the worst case, it might feed me an argument like this:

"\"Toys \\\"R\\\" Us \$250 Gift\" <o'dear at xxx.com>" 

Printing the argument:

"Toys \"R\" Us $250 Gift" <o'dear at xxx.com>

That's nice.  That's how it actually looked in the email.

My program has to feed that string into MySql.  It should look the
same as on the argument list, plus some %'s:

"%\"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.com>%"

And for the life of me, I can't get it to happen.

Here's my little test script that tries 4 different approaches, none
of which work:

---

#! /usr/bin/env python

import sys

address = sys.argv[1]
print address
db_style = '''%%%s%%''' % address
print '1', db_style

ad2 = address.replace('"','\\"')
db_style2 = '''%%%s%%''' % ad2
print "2:", db_style2

ad3 = address.replace('\"','\\\"')
ad3 = ad3.replace('"','\\"')
db_style3 = '''%%%s%%''' % ad3
print '3:', db_style3

ad44 = ''
ad4 = address.replace('\"','\\\"')
print ad4
mark = 0
for ch in ad4:
     print ch,
     if ch == '\\' and mark == 1: # two in a row
         ad44 += '\\\\'  # make 3?
         mark = 1
     elif ch == '\\':
         mark = 1
         ad44 += ch
     elif ch == '"' and mark:
         ad44 += ch
         mark = 0
     elif ch == '"':
         ad44 += '\\"'
         mark = 0
     else:
         ad44 += ch
     print ad44

db_style4 = '''%%%s%%''' % ad4
print db_style4

---

./arg_test.py "\"Toys \\\"R\\\" Us \$250 Gift\" <o'dear at xxx.com>" 
"Toys \"R\" Us $250 Gift" <o'dear at xxx.com>
1 %"Toys \"R\" Us $250 Gift" <o'dear at xxx.com>%
2: %\"Toys \\"R\\" Us $250 Gift\" <o'dear at xxx.com>%
3: %\\"Toys \\\"R\\\" Us $250 Gift\\" <o'dear at xxx.com>%
\"Toys \\"R\\" Us $250 Gift\" <o'dear at xxx.com>
\ \
" \"
T \"T
o \"To
y \"Toy
s \"Toys
   \"Toys 
\ \"Toys \
\ \"Toys \\\
" \"Toys \\\"
R \"Toys \\\"R
\ \"Toys \\\"R\
\ \"Toys \\\"R\\\
" \"Toys \\\"R\\\"
   \"Toys \\\"R\\\" 
U \"Toys \\\"R\\\" U
s \"Toys \\\"R\\\" Us
   \"Toys \\\"R\\\" Us 
$ \"Toys \\\"R\\\" Us $
2 \"Toys \\\"R\\\" Us $2
5 \"Toys \\\"R\\\" Us $25
0 \"Toys \\\"R\\\" Us $250
   \"Toys \\\"R\\\" Us $250 
G \"Toys \\\"R\\\" Us $250 G
i \"Toys \\\"R\\\" Us $250 Gi
f \"Toys \\\"R\\\" Us $250 Gif
t \"Toys \\\"R\\\" Us $250 Gift
\ \"Toys \\\"R\\\" Us $250 Gift\
" \"Toys \\\"R\\\" Us $250 Gift\"
   \"Toys \\\"R\\\" Us $250 Gift\" 
< \"Toys \\\"R\\\" Us $250 Gift\" <
o \"Toys \\\"R\\\" Us $250 Gift\" <o
' \"Toys \\\"R\\\" Us $250 Gift\" <o'
d \"Toys \\\"R\\\" Us $250 Gift\" <o'd
e \"Toys \\\"R\\\" Us $250 Gift\" <o'de
a \"Toys \\\"R\\\" Us $250 Gift\" <o'dea
r \"Toys \\\"R\\\" Us $250 Gift\" <o'dear
@ \"Toys \\\"R\\\" Us $250 Gift\" <o'dear@
x \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at x
x \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xx
x \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx
. \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.
c \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.c
o \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.co
m \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.com
> \"Toys \\\"R\\\" Us $250 Gift\" <o'dear at xxx.com>
%\"Toys \\"R\\" Us $250 Gift\" <o'dear at xxx.com>%
[root at maildance scripts]#

Help!!!

Thank you.

Marilyn Davis



More information about the Tutor mailing list