Способ работы csv.reader()
состоит в том, что он возвращает списки, каждый из которых представляет строку .Поэтому, если у вас есть CSV-файл, который выглядит следующим образом:
col1, col2, col3, col4
a, b, c, d
e, f, g, h
i, j, k, l
Соответствующее содержимое csv.reader()
выглядит следующим образом:
>>> with open('blah.csv', 'rb') as csv_file:
... cr = csv.reader(csv_file)
... for row in cr:
... print row
...
['col1', ' col2', ' col3', ' col4']
['a', ' b', ' c', ' d']
['e', ' f', ' g', ' h']
['i', ' j', ' k', ' l']
Что хорошо в списках, так это то, что вы можете нарезать ихих.
>>> with open('blah.csv', 'rb') as csv_file:
... cr = csv.reader(csv_file)
... for row in cr:
... print row[0:3]
...
['col1', ' col2', ' col3']
['a', ' b', ' c']
['e', ' f', ' g']
['i', ' j', ' k']
Это наиболее очевидный способ пропустить последние несколько столбцов таблицы CSV.Вы также можете объединить фрагменты списков:
>>> with open('blah.csv', 'rb') as csv_file:
... cr = csv.reader(csv_file)
... for row in cr:
... print row[0:2] + row[3:]
...
['col1', ' col2', ' col4']
['a', ' b', ' d']
['e', ' f', ' h']
['i', ' j', ' l']
Соберите все вместе:
>>> with open('blah.csv', 'rb') as csv_file:
... sql_insert = 'INSERT INTO table_name VALUES(?, ?, ?)'
... for row in csv.reader(csv_file):
... cu.execute(sql_insert, row[0:2] + row[3:])
...
<sqlite3.Cursor object at 0x100535298>
<sqlite3.Cursor object at 0x100535298>
<sqlite3.Cursor object at 0x100535298>
<sqlite3.Cursor object at 0x100535298>
>>> cu.execute('SELECT * FROM table_name').fetchall()
[(u'col1', u' col2', u' col4'), (u'a', u' b', u' d'), (u'e', u' f', u' h'), (u'i', u' j', u' l')]