python中的Sqlite问题:列表索引超出范围

2024-04-26 07:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

import sqlite3

def create_history(string1, r):
   db = sqlite3.connect(r)
   curr = db.cursor()

   db.execute('drop table if exists r')
   db.execute('create table r (symbol text, name text, datastartdate integer, \
   dataenddate integer)')
   for line in string1:
      value = line.strip().split(',')
      symbol = value[0]
      name = value[1]
      datastartdate = int(value[2])
      dataenddate = int(value[3])
      db.execute("insert into r values (?,?,?,?)", 
                 (symbol, name, datestartdate, dataenddate))
   db.commit()
   curr.close()
   db.close()

对于这段代码,我总是出错。现在我得到了list index out of range。我试图用SQLite创建一个数据库,但我对它并没有真正的经验。在

^{pr2}$

文件中string1的数据是

AFU-UN,ACUITY FOCUSED TTL TRUST UNITS,20050216,20090831
BCD,DIAMONDCORE LTD,20080213,20091030
BMT,BMONT SPLIT CORP COM STK NPV,20060418,20090805
HUG,HORIZONS BETAPRO COMEX GOLD ET,20091029,20091030
NAE-UN,NAL OIL & GAS TST TRUST UNITS,19960813,20091030
NXY,NEXEN INC COM NPV,19950112,20091030
SCC,SEARS CANADA INC COM NPV,19950112,20091030
YNG,YUKON-NEVADA GOLD COM NPV,20050419,20091030

这是关于股票的信息,价值按以下顺序排列:

Symbol
Name
DataStartdate
DataEnddate

最终创建的文件总是用一堆null填充。这些也是用于执行函数的参数

create_history(open('sample_history'), 'history.db'))

现在最大的问题是零。在


Tags: textnamecomexecutedbvaluecreatetable
1条回答
网友
1楼 · 发布于 2024-04-26 07:19:57

如果string1是单个字符串中的整个文件,则for line in strings: …将迭代字符串中的每个字符。您需要先在换行符上拆分:

for line in strings.split('\n'):
    …

但最好在输入文件上输入迭代器,例如:

^{pr2}$

更好的是,使用Python的csv模块:

def create_history(input, …):
    …
    for row in csv.reader(input):
        symbol = row[0]
        …

相关问题 更多 >