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 ファイルの場合、各行の「フィールド」の量が異なる場合があります。一部の行には、末尾の空の列または余分なガベージが含まれている場合、「列名」行よりも多くのまたは少ないフィールドが含まれる場合があります (余分なまたは不足しているコンマ)。

最初に CSV を読み取って定義する必要があるため、「field_size_limit」は使用できません。

次の目的のいずれかを達成するためのより簡単な方法はありますか?
1. CSV ファイルを読み取るときに、一定量の列を指定して、コンマを自動的に挿入または削除しますか?
2. mysqlite データベースにエントリを挿入するとき、一定量の列を指定して、可変量の入力列を受け入れることができるようにしますか?

前もって感謝します。

4

0 に答える 0