On Mon, 02 Jun 2008 17:49:11 -0700, Scott David Daniels
<[EMAIL PROTECTED]> wrote:
>(c, "NULL") is  a tuple; it is being indexed by the boolean "c == ''"
>Since False is 0, and True is 1, the expression picks out "NULL"
>exactly when c is the zero-length string.

Thanks Scott, and also to Peter above, and sorry for not having
answered earlier.

I'm having two problems: The first code doesn't strip the
double-quotes when the string is empty. IOW, "not empty" or NULL, but
not "NULL"

The second code hits "IndexError: list index out of range" because of
Yield() which I don't seem to be using correctly:

==========
        p = re.compile("^(\d+)\t(.*?)")
        for line in textlines:
                m = p.search(line)
                if m:
                        sql = sql + 'INSERT INTO mytable (col1,col2) VALUES
("%s","%s");' % tuple ((c,"NULL")[c == ''] for c in m.groups())

        #cursor.execute(sql)
        connection.close(True)
        print sql
==========
import csv
import sqlite3 as sqlite

def records(infile):
        for row in csv.reader(infile):
          #IndexError: list index out of range
          #BAD yield row[0], row[1] or None
          #BAD yield row[0] or None, row[1] or None

def main():
        db = sqlite.connect("test.sqlite")
        cursor = db.cursor()    

        #How to handle empty columns, ie. <TAB><TAB>?
        cursor.executemany("insert into mytable (col1,col2) values (?,?);",
records("test.sqlite"))
        
if __name__ == "__main__":
    main()
==========

Thank you.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to