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

2024-06-01 01:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个包含不同纬度和纵向坐标以及一些其他数据的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个月了,我真的不确定该怎么做。如果有人有主意

还有其他建议吗

编辑:

一个文件到writeToDatabase的运行时间为17.17秒,一个文件到writeToDatabase的运行时间为60-70秒。如果我删除索引,我会将writeToDatabase缩短到9-20秒,但是我也需要将此数据写入其他表,在其他表中,我将需要其他索引


Tags: 文件数据dataportfloatdatabaseinttotal