我有几个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秒,但是我需要将这些数据写入其他表,而在其他表中我将需要其他索引。