ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> python-tutor
python-tutor
Re: [Tutor] Alternative File I/O for Tuples (fwd)
by Don Parris other posts by this author
Jun 28 2005 9:10AM messages near this date
Re: [Tutor] Alternative File I/O for Tuples (fwd) | Re: [Tutor] Alternative File I/O for Tuples (fwd)
On Tue, 28 Jun 2005 05:50:54 -0400
Kent Johnson <kent37@[...].net>  wrote:

>  Don Parris wrote:
>  > Just getting back to this - Mondays are always hectic.  This recipe is
>  > the one I saw and like.  It looks cool!  In my brief efforts tinkering
>  > with it, I am not really getting very far.  I saved the recipe, and
>  > import it into the file containing all my database functions.  In one of
>  > the functions, I have the following:
>  > 
>  > I used the "from tbl_Tabs import *" approach to import the recipe.  If I
>  > should be doing this differently, just say so.
>  > 
>  >     for record in Results:
>  >         print '%-15s\t%-15s\t%-15s' % record    
>  > # I still want to print to screen, then...
>  > 
>  >         mbrPhone = open('mbrPhone.txt', 'w')
>  >         mbrPhone.write(indent(record, hasHeader=False,
>  >         separateRows=True)) mbrPhone.close()
>  
>  The problem is you are just passing one record to indent(). It processes
>  the whole table at once so you have to pass the list of records, i.e.
>          mbrPhone.write(indent(Results, hasHeader=False,
>          separateRows=True))
>  
>  and do this outside the loop or you will write the file once for every
>  record. So your code should look like this:
>  
>      for record in Results:
>          print '%-15s\t%-15s\t%-15s' % record    
>  # I still want to print to screen, then...
>  
>      # Notice different indent from your code
>      mbrPhone = open('mbrPhone.txt', 'w')
>      mbrPhone.write(indent(Results, hasHeader=False, separateRows=True))
>      mbrPhone.close()
>  

O.k., I'm curious about the indentation issue here.  There is only one file,
and it has the correct information - looking at it from a text editor.  Is
my version overwriting the file every time it iterates then?  You'll get a
laugh out of this, because when I was playing with sending the file to the
printer, I did not dedent the printer call, and it did try to print a copy
of the file for each record.  

Needless to say, I learned the command "lprm" Saturday! I caught onto the
indentation, which fixed that.  However, I did not pay attention to the code
above - probably because I don't have 50-something files named
mbrPhone*.txt.  Go ahead and laugh, I did!

>  > 
>  > I first assumed that "record", and then "Results" could be substituted
>  > for"rows", per the recipe.  I also tried "rows", and assigning "record",
>  > and then "Results" to "rows".  O.k., you can laugh all you want.  I
>  > tried playing with the various arguments, and found that to be of little
>  > value.
>  > 
>  > The traceback refers to a type error: iteration over a non-sequence. 
>  > The query returns a tuple, as I understand it.  I also understand a
>  > tuple to be a sequence.  If this is really as simple as the 3 lines you
>  > pointed out above, I know I'm missing something in the implementation.
>  
>  Yes, a tuple is a sequence. If you still get an error with the code above,
>  please post the exact error message and traceback (copy / paste from the
>  output), there is a lot of useful information in it that can be lost if
>  you paraphrase.
>  
>  Kent
>  

O.k.,

Here we go.  Global name "rows" is not defined.  My guess is that "rows"
needs to know that it should be holding "Results", but maybe it should
already know that.  I tried to say rows = Results, but that did not help.
This seems to come back to the difficulty I have with passing arguments
around.

### Revised Code ###
    print 'Phone List'
    for record in Results:
        print '%-15s\t%-15s\t%-15s' % record
    # rows = Results did not work
    mbrPhone = open('mbrPhone.txt', 'w')
    mbrPhone.write(indent(rows, hasHeader=False, separateRows=False,
                              prefix='| ', postfix=' |'))
    mbrPhone.close()


### Traceback ###
Traceback (most recent call last):
  File "ekklesia.py", line 165, in ?
    Main()
  File "ekklesia.py", line 160, in Main
    RunMenu(Menu_Main)
  File "ekklesia.py", line 31, in RunMenu
    if len(MenuList[sel]) == 3: MenuList[sel][1](MenuList[sel][2])
  File "ekklesia.py", line 32, in RunMenu
    else: MenuList[sel][1]()
  File "/home/donp/python/ekklesia/ekklesia_db.py", line 61, in mbr_Phone
    mbrPhone.write(indent(rows, hasHeader=False, separateRows=False,NameError: global name '
rows' is not defined


BTW, I really appreciate your patience and willingness to help me understand
this.  If I had ever dreamed that I would have a desire to program 20 years
after the fact, I would have stopped passing notes in Math class.  I do it
well, but hate it.  Yet, I find myself drawn further and further into the
code, actually wanting to know more about it - why it does what it does.

Don
-- 
evangelinux    GNU Evangelist
http://matheteuo.org/                   http://chaddb.sourceforge.net/
"Free software is like God's love - you can share it with anyone anytime
anywhere."
_______________________________________________
Tutor maillist  -  Tutor@[...].org
http://mail.python.org/mailman/listinfo/tutor
Thread:
Danny Yoo
Kent Johnson
Don Parris
Don Parris
Kent Johnson
Don Parris
Kent Johnson
Don Parris
Kent Johnson
Don Parris
Kent Johnson
Don Parris

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved