我有一个这样形式的 SQLite 数据库:
Table1
Column1 | Column 2 | Column 3 | Column 4
Run Code Online (Sandbox Code Playgroud)
我想用存储在数百个 .out 文件中的数据填充此数据库,其中每个文件都有数百万行:
value1;value2;value3;value4;
2value1;2value2;2value3;2value4;
... etc
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法来将这些数据填充到数据库中?一种方法是读取 python 中的数据行并插入,但是可能应该有一种更快的方法来输入整个文件?
Bash、SQLite、Python 优先
我有大量的文件,每个文件将被解码,排序/最小化,然后放入数据库.每个操作都有自己的bash脚本.这些文件被分类到每日文件中,这些文件位于连续的每月文件夹中.问题是只有一个数据库,只有一个表(SQLite),所以数据库脚本当时只能在一个文件上运行,而解码和排序可以同时在大约四个文件上完成.
对于要排序的文件,必须通过解码过程,要将文件放入数据库,必须对其进行解码和排序.这些脚本的运行时间不一样,我相信解码是空腹,然后是输入然后是排序.
每个bash脚本decode.sh sort.sh saveintodb.sh循环遍历文件夹中的所有文件并完成其工作.
最初我想有一个masterscript执行decode.sh- > sort.sh- > saveintodb.sh
每个文件夹(月).
但是,由于预计需要几天时间,我想到了这样的事情:
1: decode.sh January
2: sort.sh January, decode.sh February
3: saveintodb.sh January sort.sh February decode.sh March
4: saveintodb.sh February sort.sh March decode.sh April
Run Code Online (Sandbox Code Playgroud)
等等.直到12月.
但是,我不知道如何设置它,以一种好的方式.我知道我可以2:在并行运行脚本,但是我不太确定如何运行脚本3:当2:完成时自动运行.
我也不确定这是否是最好的方法.理想情况下,有一个解码脚本,一个排序脚本和一个始终运行的saveintodb脚本.甚至可能是几个解码和排序脚本(不知道如果这会加快这个过程,我很遗憾地在外部HD工作).
数据量: 1.3 TB
数据类型:文本文件
背景:位置报告(纬度/经度,时间)
对不起这篇长文,有什么建议吗?
我正在将数据从一个表插入到另一个表,但是由于某种原因,我得到了“无法识别的令牌”。这是代码:
cur.execute("INSERT INTO db.{table} SELECT distinct latitude, longitude, port FROM MessageType1 WHERE latitude>={minlat} AND latitude<={maxlat} AND longitude>= {minlong} AND longitude<= {maxlong}".format(minlat = bottomlat, maxlat = toplat, minlong = bottomlong, maxlong = toplong, table=tablename))
Run Code Online (Sandbox Code Playgroud)
这将转换为以下值:
INSERT INTO db.Vardo SELECT distinct latitude, longitude, port FROM MessageType1 WHERE latitude>=69.41 AND latitude<=70.948 AND longitude>= 27.72 AND longitude<= 28.416
Run Code Online (Sandbox Code Playgroud)
错误代码如下:
sqlite3.OperationalError: unrecognized token: "70.948 AND"
Run Code Online (Sandbox Code Playgroud)
是否存在三个小数点的问题?
这是表的create语句:
cur.execute("CREATE TABLE {site} (latitude, longitude, port)".format(site = site))
Run Code Online (Sandbox Code Playgroud) 这是我的标题,我添加了字体真棒,如主页所述:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- Custom Font awesome -->
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<!-- Bootstrap core CSS -->
<link href="../css/bootstrap.css" rel="stylesheet"
</head>
Run Code Online (Sandbox Code Playgroud)
并尝试通过添加测试字体真棒
<a class="btn btn-lg btn-success" href="#">
<i class="fa fa-flag fa-2x pull-left"></i> Font Awesome<br>Version 4.0.3
</a>
Run Code Online (Sandbox Code Playgroud)
但结果是:没有任何字体真棒特定的排版或图标.看起来字体真棒不会压抑引导代码.有人可以帮忙吗?
我正在使用Pythons散点图进行简单的散点图.但无论我如何设置我的轴,无论我没有任何负值,我都会在x轴上得到负值.如何强制轴从0开始?
我的代码:
fig, ax = plt.subplots(1)
ax.scatter(lengths,breadths, alpha=0.3, color="#e74c3c", edgecolors='none')
spines_to_remove = ['top', 'right']
for spine in spines_to_remove:
ax.spines[spine].set_visible(False)
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')
ax.xaxis.set_view_interval(0,400)
ax.yaxis.set_view_interval(0,90)
figname = 'scatterlengthsbreadths.pdf'
fig.savefig(figname, bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud) 我有数百个带有地理位置的.out文件,我将批量导入到SQLite数据库中.但是,为了节省时间,我只会在某些间隔内导入具有地理坐标的线.
该文件是这样的:
value;value;longitude;latitude;value;value
value;value;longitude;latitude;value;value
Run Code Online (Sandbox Code Playgroud)
因此,应该从文件中删除不在多个纬度和经度间隔内的所有内容.
for f in *.out
do
for each line in $f:
if not longitude >= longitude1 and longitude <= longitude2
or longitude >= longitude3 and longitude <= longitude4 or
longitude>=longitude5 and longitude<=4:
delete line
Run Code Online (Sandbox Code Playgroud)
我已经包含了一个伪代码以显示一些努力,但是我将如何在Bash,awk,python中执行此操作,或者哪种方法是最快的.
经度和纬度是这里的第三和第四个值.我有21个纬度区间,f.ex 69.41到70.95(纬度).
示例输入
63;543534;34,12;59,43;22,80;654,324;139543;
63;25725;5,11;59,43;22,80;36,00;1391212800;
61;5382189;3,66;60,93;68,00;158,00;1391212800;
43;25977000;10,72;67,51;170,70;168,00;1391212800;
61;2000;4,54;60,00;352,50;352,00;1391212800;
53;2504210;6,96;62,89;289,40;511,00;1391212800;
27;2594800;22,35;70,24;14,50;98,00;1391212800;
61;257900;5,13;60,13;321,10;195,00;1391212800;
31;2598;18,76;69,56;230,20;235,00;1391212800;
63;44000;5,84;59,01;226,90;227,00;1391212800;
61;0;4,96;60,57;125,50;129,00;1391212800;
57;2575000;4,88;61,77;113,00;276,00;1391212800;
34;258500;16,58;69,70;18,20;201,00;1391212800;
243;217000;7,18;65,25;283,00;145,00;1391212800;
243;21900;7,20;64,97;44,80;109,00;1391212800;
243;2190516;2,44;58,20;270,50;121,00;1391212800;
243;22000;1,94;58,39;305,20;130,00;1391212800;
243;231067000;1,87;58,09;12,00;122,00;1391212800;
243;311000150;3,54;61,13;166,30;332,00;1391212800;
243;257282000;7,21;64,97;267,10;112,00;1391212800;
243;232758000;1,77;61,43;333,30;337,00;1391212800;
27;231711000;22,42;70,27;99,20;99,00;1391212800;
68;231770000;10,06;58,74;5,40;10,00;1391212800;
Run Code Online (Sandbox Code Playgroud)
所需输出,纬度间隔为69.41至70.95:
27;2594800;22,35;70,24;14,50;98,00;1391212800;
31;2598;18,76;69,56;230,20;235,00;1391212800;
34;258500;16,58;69,70;18,20;201,00;1391212800;
27;231711000;22,42;70,27;99,20;99,00;1391212800;
Run Code Online (Sandbox Code Playgroud)
请注意,这应该优先写入新文件或覆盖现有文件.
python ×5
bash ×3
sqlite ×2
coordinates ×1
css ×1
database ×1
font-awesome ×1
fonts ×1
linux ×1
matplotlib ×1
scatter-plot ×1
shell ×1
sql ×1
ubuntu ×1