在保存数据库之前或之后,将数据分类到不同的区域然后在数据库中输入?

时间:2015-07-20 11:44:56

标签: python sqlite

我有几个txt文件,其中的条目包含不同的纬度和纵向坐标以及一些其他数据。我想将这些数据输入到单独的sqlite表中,区别在于它们的纬度和纵向坐标。总而言之,我想提供23个地理区域。但是,我有点不确定我最好怎么做。到目前为止,我的想法是读取数据并将其输入到一个数据表中,然后将其区分为不同的字段:

 cur.execute("CREATE TABLE Total (unixtime int, mmsi int, latitude float, longitude float, port int)".format(site = site))
 cur.execute("CREATE INDEX latitude_index ON Total (latitude)")
 cur.execute("CREATE INDEX longitude_index ON Total (longitude)")

def writeToDatabase(databasepath, tablename, data):
    con = lite.connect(databasepath)
    cur = con.cursor()
    query = """
    INSERT INTO 
        {table} (unixtime, mmsi, latitude, longitude, port)
    values (?,?,?,?,?)
""".format(table=tablename)
    cur.executemany(query, (data))


if __name__ == "__main__":
    words = []
    port = []
    mmsi = []
    unixtime = []
    longitude = []
    latitude = []
    newdata = []
    databasepath = "SAISGlobal.db"
    createDatabaseTable(databasepath)
    for filename in os.listdir('data'):
        with open("data/"+filename) as f:   # Use file to refer to the file object
            data = f.readlines()
            for line in data:
                words = line.split(";")
                port.append(int(words[0]))
                mmsi.append(int(words[1]))
                unixtime.append(int(words[6]))
                longitude.append(float(words[2]))
                latitude.append(float(words[3]))
        newdata = zip(unixtime, mmsi, latitude, longitude, port)
        writeToDatabase("SAISGlobal.db", 'Total', newdata)

然后,我们的想法是从Total表中提取数据,并使用SQLite查询将其插入到每个区域的不同表中。但是,可能有更好的方法来做到这一点?每个文件包含200-300 MB的数据,并且有300-400个文件。

我可以在插入数据库之前将数据区分为表吗?由于它是23个sones,我真的不确定我将如何做到这一点。如果有人有想法?

还有其他建议吗?

修改

对于一个文件,writeToDatabase的运行时间为17.17秒,writeToDatabase对于一个文件需要60-70秒。如果删除索引,我将writeToDatabase减少到9-20秒,但是我需要将这些数据写入其他表,而在其他表中我将需要其他索引。

0 个答案:

没有答案