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