1

我在 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数据库插入条目时,指定固定数量的列,以便它可以接受可变数量的输入列?

提前致谢。

4

0 回答 0