固定从CSV到pysqlite的列数

时间:2013-06-14 18:27:37

标签: python csv excel-2003 python-2.6 pysqlite

我在Windows 8上使用Python 2.6(32位)。目的是从逗号分隔的CSV文件构建一个pysqlite数据库,其中第一行是列名。

我的代码如下(一些代码被跳过):

def BuildDatabaseFromCSV(self, file_name):
    with file(file_name, 'rb') as source:   
        csvreader = csv.reader(source)
        first_entry = csvreader.next()
        self.BuildTable(first_entry)
        #self.AddEntries(csvreader)
        for entry in csvreader:
            self.AddEntry(entry)

def BuildTable(self, cols_names):
    cmd_line = str(cols_names)[1:-1]   #Remove '[]' from list type    
    cmd_line = "create table %s (%s)" % (self._t_name, cmd_line)
    self._cursor.execute(cmd_line)  #Creating table
    self._db.commit()
    self._col_num = len(cols_names)

def AddEntry(self, entry):
    length = len(entry)
    if self._col_num > length: #Padding empty fields
        entry += ([''] * (self._col_num - length))
    elif self._col_num < length: #Crop extra fields
        entry = entry[:self._col_num]
    cmd_line = "insert into %s values (%s)"\
        % (self._t_name, ("?," * self._col_num)[:-1])
    self._cursor.execute(cmd_line, entry)
    self._db.commit()

def AddEntries(self, entries):
    cmd_line = "insert into %s values (%s)"\
        % (self._t_name, ("?," * self._col_num)[:-1])
    self._cursor.executemany(cmd_line, entries)
    self._db.commit()

最初我使用AddEntries()将CSV文件中的条目添加到我的数据库中。但是,对于Excel 2003生成的CSV文件,每行的“字段”数量可能不同。如果某些行包含尾列空列或一些额外的垃圾,则可能包含比“列名”行(额外或缺少逗号)更多或更少的字段。

我不能使用“field_size_limit”,因为我需要先读取CSV来定义它。

有没有更简单的方法来实现以下任何目的?
  1.读取CSV文件时,指定固定数量的列,以便自动插入或删除逗号?   2.在mysqlite数据库中插入一个条目时,指定一个固定数量的列,以便它可以接受可变数量的输入列?

提前致谢。

0 个答案:

没有答案