背景: 读取文件,然后插入数据库。 由于是远程数据库,所以使用了批量写入。
假如文件 10050 行(实际多得多) 现在是按 %100 ==0 把前 100 行插入进去,但是会留下 50 这个尾巴。
各位有更好的办法解决这个问题不?
背景: 读取文件,然后插入数据库。 由于是远程数据库,所以使用了批量写入。
假如文件 10050 行(实际多得多) 现在是按 %100 ==0 把前 100 行插入进去,但是会留下 50 这个尾巴。
各位有更好的办法解决这个问题不?
|
hannibalmMar 20, 2022 via Android
1
这是所有取模的常规判断,三中情况都要判断:余下的数据要最后处理完;也可能正好除尽没有剩余;也可能第一次就不够 100 条。
|
|
kilasuelikaMar 20, 2022 via Android
2
这种不适合取模。
用一个指针 p ,初始为 0 ,取 window 为 n ,用 while 循环。如果 p+n<size ,那么可以取的是[p,p+n),然后更新 p=p+n ;否则取[p,size),然后 break 。 |
|
kilasuelikaMar 20, 2022 via Android
3
噢你这个是流文件读取。
那还是用取模,可以用一个缓存,取模恰好等于 0 时插入并清空缓存。 等文件全部读取后,再把缓存中的插入。 |
|
twing37Mar 20, 2022
4
程序结束前检查 buffer 即可
|
|
5
|
|
ldyisbestMar 20, 2022
6
先全部读到内存,然后把数据分片,除了最后一片都是 100 ,最后有个 50 ,不会漏
|
|
agostopMar 20, 2022
7
同意楼上,分两步,先分片,再处理分片。
|
|
MoYi123Mar 21, 2022
8
from itertools import groupby
ls = list(range(105)) for i, v in groupby(ls, key=lambda x: x // 10): __print(i, list(v)) |