Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #79857 > unrolled thread

% symbol in python

Started bysatishmlmlml@gmail.com
First post2014-10-28 14:41 -0700
Last post2014-10-29 08:40 +0000
Articles 9 — 5 participants

Back to article view | Back to comp.lang.python


Contents

  % symbol in python satishmlmlml@gmail.com - 2014-10-28 14:41 -0700
    Re: % symbol in python Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-10-28 22:17 +0000
    Re:% symbol in python Dave Angel <davea@davea.name> - 2014-10-28 21:57 -0400
      Re: % symbol in python satishmlmlml@gmail.com - 2014-10-28 20:51 -0700
        Re: % symbol in python Chris Angelico <rosuav@gmail.com> - 2014-10-29 15:02 +1100
          Re: % symbol in python satishmlmlml@gmail.com - 2014-10-28 21:41 -0700
            Re: % symbol in python alex23 <wuwei23@gmail.com> - 2014-10-29 15:25 +1000
              Re: % symbol in python satishmlmlml@gmail.com - 2014-10-28 22:48 -0700
                Re: % symbol in python Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-10-29 08:40 +0000

#79857 — % symbol in python

Fromsatishmlmlml@gmail.com
Date2014-10-28 14:41 -0700
Subject% symbol in python
Message-ID<b80ee29c-e23a-4f11-9c65-746f7d74c347@googlegroups.com>
<tr><th>key<td><input type=text name=key value="%(key)s">
rowhtml = '<tr><th>%s<td><input type=text name=%s value"%%(%s)s">\n"

what does % mean in first line of code and
what does %%(%s)s mean in second line of code

kindly explain

[toc] | [next] | [standalone]


#79859

FromMark Lawrence <breamoreboy@yahoo.co.uk>
Date2014-10-28 22:17 +0000
Message-ID<mailman.15272.1414534647.18130.python-list@python.org>
In reply to#79857
On 28/10/2014 21:41, satishmlmlml@gmail.com wrote:
> <tr><th>key<td><input type=text name=key value="%(key)s">
> rowhtml = '<tr><th>%s<td><input type=text name=%s value"%%(%s)s">\n"
>
> what does % mean in first line of code and
> what does %%(%s)s mean in second line of code
>
> kindly explain
>

Please refer to 
https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

[toc] | [prev] | [next] | [standalone]


#79865

FromDave Angel <davea@davea.name>
Date2014-10-28 21:57 -0400
Message-ID<mailman.15276.1414547634.18130.python-list@python.org>
In reply to#79857
satishmlmlml@gmail.com Wrote in message:
> <tr><th>key<td><input type=text name=key value="%(key)s">
> rowhtml = '<tr><th>%s<td><input type=text name=%s value"%%(%s)s">\n"
> 
> what does % mean in first line of code and
> what does %%(%s)s mean in second line of code
> 
> kindly explain
> 

Please post Python code, and we can try to comment on it. Those
 extra <tr> and <th> thingies are really killing my mental syntax
 checker.

Also, always specify the python version. 
-- 
DaveA

[toc] | [prev] | [next] | [standalone]


#79874

Fromsatishmlmlml@gmail.com
Date2014-10-28 20:51 -0700
Message-ID<9a7bada3-6a2c-49c1-9806-cbf690a350b8@googlegroups.com>
In reply to#79865
import cgi, shelve, sys, os
shelvename = 'class-shelve'
fieldnames = ('name', 'age', 'job', 'pay')
form = cgi.FieldStorage()
print('Content-type: text/html')
sys.path.insert(0, os.getcwd())
replyhtml = """
<html>
<title>People Input Form</title>
<body>
<form method=POST action="peoplecgi.py">
<table>
<tr><th>key<td><input type=text name=key value="%(key)s">
$ROWS$
</table>
<p>
<input type=submit value="Fetch", name=action>
<input type=submit value="Update", name=action>
</form>
</body></html>
"""
rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
rowshtml = ''
for fieldname in fieldnames:
rowshtml += (rowhtml % ((fieldname, ) * 3))
replyhtml = replyhtml.replace('$ROWS$', rowshtml)
def htmlize(adict):
new = adict.copy()
for field in fieldnames:
value = new[field]
new[field] = cgi.escape(repr(value))
return new

def fetchRecord(db, form):
try:
key = form['key'].value
record = db[key]
fields = record.__dict__
fields['key'] = key
except:
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing or invalid key!'
return fields
def updateRecord(db, form):
if not 'key' in form:
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing key input!'
else:
key = form['key'].value
if key in db:
record = db[key]
else:
from person import Person
record = Person(name='?', age='?')
for field in fieldnames:
setattr(record, field, eval(form[field].value))
db[key] = record
fields = record.__dict__
fields['key'] = key
return fields
db  =  shelve.open(shelvename)
action = form['action'].value if 'action' in form else None
if action == 'Fetch':
fields = fetchRecord(db, form)
elif action == 'Update':
fields = updateRecord(db, form)
else:
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing or invalid action!'
db.close()
print(replyhtml % htmlize(fields))

[toc] | [prev] | [next] | [standalone]


#79875

FromChris Angelico <rosuav@gmail.com>
Date2014-10-29 15:02 +1100
Message-ID<mailman.15280.1414555330.18130.python-list@python.org>
In reply to#79874
On Wed, Oct 29, 2014 at 2:51 PM,  <satishmlmlml@gmail.com> wrote:
> def fetchRecord(db, form):
> try:
> key = form['key'].value

When you paste Python code into an email, it's absolutely crucial that
you maintain formatting. The indentation is significant. Can you paste
it again, please?

ChrisA

[toc] | [prev] | [next] | [standalone]


#79879

Fromsatishmlmlml@gmail.com
Date2014-10-28 21:41 -0700
Message-ID<77e77ae3-315e-4c3e-aedf-f501c8a217a7@googlegroups.com>
In reply to#79875
import cgi, shelve, sys, os 
shelvename = 'class-shelve' 
fieldnames = ('name', 'age', 'job', 'pay') 
form = cgi.FieldStorage() 
print('Content-type: text/html') 
sys.path.insert(0, os.getcwd()) 
replyhtml = """ 
<html> 
<title>People Input Form</title> 
<body> 
<form method=POST action="peoplecgi.py"> 
 <table> 
 <tr><th>key<td><input type=text name=key value="%(key)s"> 
 $ROWS$ 
 </table> 
 <p> 
 <input type=submit value="Fetch", name=action> 
 <input type=submit value="Update", name=action> 
</form> 
</body></html> 
""" 
rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n' 
rowshtml = '' 
for fieldname in fieldnames: 
 rowshtml += (rowhtml % ((fieldname, ) * 3)) 
 replyhtml = replyhtml.replace('$ROWS$', rowshtml) 
def htmlize(adict): 
 new = adict.copy() 
 for field in fieldnames: 
  value = new[field] 
  new[field] = cgi.escape(repr(value)) 
 return new 

def fetchRecord(db, form): 
 try: 
  key = form['key'].value 
  record = db[key] 
  fields = record.__dict__ 
  fields['key'] = key 
 except: 
  fields = dict.fromkeys(fieldnames, '?') 
  fields['key'] = 'Missing or invalid key!' 
 return fields 
def updateRecord(db, form): 
 if not 'key' in form: 
  fields = dict.fromkeys(fieldnames, '?') 
  fields['key'] = 'Missing key input!' 
 else: 
  key = form['key'].value 
  if key in db: 
   record = db[key] 
 else: 
   from person import Person 
   record = Person(name='?', age='?') 
 for field in fieldnames: 
   setattr(record, field, eval(form[field].value)) 
  db[key] = record 
  fields = record.__dict__ 
  fields['key'] = key 
 return fields 
db  =  shelve.open(shelvename) 
action = form['action'].value if 'action' in form else None 
if action == 'Fetch': 
 fields = fetchRecord(db, form) 
elif action == 'Update': 
 fields = updateRecord(db, form) 
else: 
 fields = dict.fromkeys(fieldnames, '?') 
 fields['key'] = 'Missing or invalid action!' 
db.close() 
print(replyhtml % htmlize(fields)) 


kindly let me know what is $ROWS$ along with % symbol's meaning

[toc] | [prev] | [next] | [standalone]


#79884

Fromalex23 <wuwei23@gmail.com>
Date2014-10-29 15:25 +1000
Message-ID<m2ptoj$hnv$1@dont-email.me>
In reply to#79879
On 29/10/2014 2:41 PM, satishmlmlml@gmail.com wrote:
 > kindly let me know what is $ROWS$ along with % symbol's meaning

It's a token, a static value added to the template to indicate where 
additional data will be added.

So $ROW$ in this section:

>   <table>
>   <tr><th>key<td><input type=text name=key value="%(key)s">
>   $ROWS$
 >   </table>

Will be replaced by whatever rowshtml contains at this point:

>   replyhtml = replyhtml.replace('$ROWS$', rowshtml)

Of note: the template section above has opening tags for <tr>, <th> and 
<td> but no closing ones. It's not valid html.

Also I don't think this is doing what you think it is:

 > rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
 > rowshtml = ''
 > for fieldname in fieldnames:
 >  rowshtml += (rowhtml % ((fieldname, ) * 3))
 >  replyhtml = replyhtml.replace('$ROWS$', rowshtml)

After the first fieldname ('name' in this case), the token $ROWS$ will 
be replaced by the string :

     '<tr><th>name<td><input type=text name=name value="%%(name)s">\n'.

On the second iteration of the loop, when fieldname is 'age', rowshtml 
will equal:

      '<tr><th>name<td><input type=text name=name 
value="%%(name)s">\n<tr><th>age<td><input type=text name=age 
value="%%(age)s">\n'

...but nothing will happen with it as $ROWS$ has already been replaced 
during the first time through the loop. Either the `replyhtml = ...` 
line is mis-indented or the code is terribly broken.

Unless this is for homework, I highly recommend just using one of the 
many templating libraries that exist for Python, such as Jinja2.

[toc] | [prev] | [next] | [standalone]


#79888

Fromsatishmlmlml@gmail.com
Date2014-10-28 22:48 -0700
Message-ID<a1636d18-3ddd-45d7-8c9e-022bb43e81ed@googlegroups.com>
In reply to#79884
kindly let me know 
what does
%%(%s)% mean 

[toc] | [prev] | [next] | [standalone]


#79899

FromMark Lawrence <breamoreboy@yahoo.co.uk>
Date2014-10-29 08:40 +0000
Message-ID<mailman.15290.1414572062.18130.python-list@python.org>
In reply to#79888
On 29/10/2014 05:48, satishmlmlml@gmail.com wrote:
> kindly let me know
> what does
> %%(%s)% mean
>

What did you not understand from the link I posted ten hours ago?

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web