感谢大家的回帖,我把问题重新整理了一下:
我把数据导入到了sqlite文件,文件下载:http://u.163.com/nnnnnEwm提取码:8uQBfsJZ
里面有A、B、C....等13个表,每个表中的记录数为
A:24,B:72,C:72,D:72,E:48,F:48,G:96,H:96,I:48,J:24,K:96,L:96,M:72,
每个表中有name字段是为了标记每条记录的唯一性,datas字段是729个0或1组成的字符串。
我用Python的for循环:
第一步,新建AB表,把A、B的数据进行循环组合,去除不符合要求的记录,结果如下:
24*72=1728条,筛选之后剩1300条,循环时间:1.66秒,数据库大小:1.0MB。
第二步,新建ABC表,把AB表和C的数据进行循环组合,去除不符合要求的记录,结果如下:
1300*72=93600条,筛选之后剩53300条,循环时间:86.86秒,数据库大小:41.7MB
第三步,新建ABCD表,把ABC表和D的数据进行循环组合,去除不符合要求的记录,结果如下:
53300*72=3837600条,筛选之后剩1705600条,循环时间:3608秒,数据库大小:1.30GB
第三步已经需要1个小时才能循环完毕,而且数据库的大小已经上GB了。但是我又做了第四步。
第四步,新建ABCDE表,把ABCD表和E的数据进行循环组合,去除不符合要求的记录,结果如下:
1705600*48=81868800条,筛选之后剩28995200条,循环时间:119253秒,数据库大小:22.1GB
第四步花了大约33个小时,也就是等了一天多的时间,可是不能再往下做了,那样一等就是很多天了,而且数据库大小也极速飙升。
【开发环境】
Inteli5-34703.20GHz,8GB内存,Win7SP164位+JupyterLab,Python3.7.6,FireFox浏览器。
【循环代码】
#创建AB表,字段A存放A序号,字段B存放B序号,字段DATAS存放A+B的DATAS
importsqlite3
conn=sqlite3.connect('KML_AB.db')
print("Openeddatabasesuccessfully")
c=conn.cursor()
c.execute('''CREATETABLEAB(ACHAR(4),BCHAR(4),DATASTEXT);''')
print("TableABcreatedsuccessfully")
conn.commit()
conn.close()
print("#Datebaseclosed")
#循环求解KML00.db与KML01.db是内容完全一样的文件
importtime
t1=time.perf_counter()
importsqlite3
conn0=sqlite3.connect('KML00.db')
conn1=sqlite3.connect('KML01.db')
conn2=sqlite3.connect('KML_AB.db')
c0=conn0.cursor()
c1=conn1.cursor()
c2=conn2.cursor()
print("#Openeddatabasesuccessfully")
try:
forxinrange(24):
c0.execute("selectrowid,name,datasfromAwhererowid="+str(x+1))
result0=c0.fetchone()
foryinrange(72):
c1.execute("selectrowid,name,datasfromBwhererowid="+str(y+1))
result1=c1.fetchone()
sData=""
forzinrange(729):
sData=sData+str(int(result0[2][z])+int(result1[2][z]))
if('2'insData):
#print(sData)
continue
else:
sqlAB="INSERTINTOAB(A,B,DATAS)VALUES('"+result0[1]+"','"+result1[1]+"','"+sData+"');"
c2.execute(sqlAB)
#print("exe")
conn2.commit()
print("#Operationdonesuccessfully")
finally:
conn0.close()
conn1.close()
conn2.close()
print("#Datebaseclosed")
print('#IniaSec:',time.perf_counter()-t1)
#IniaSec:1.6601536639991537
=========================
欢迎大家提出建议!
|