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