一个的算法问题

2022-03-20 00:28:53 +08:00
 tangdaoni

背景: 读取文件,然后插入数据库。 由于是远程数据库,所以使用了批量写入。

假如文件 10050 行(实际多得多) 现在是按 %100 ==0 把前 100 行插入进去,但是会留下 50 这个尾巴。

各位有更好的办法解决这个问题不?

2100 次点击
所在节点    Python
8 条回复
hannibalm
2022-03-20 00:34:44 +08:00
这是所有取模的常规判断,三中情况都要判断:余下的数据要最后处理完;也可能正好除尽没有剩余;也可能第一次就不够 100 条。
kilasuelika
2022-03-20 00:48:05 +08:00
这种不适合取模。
用一个指针 p ,初始为 0 ,取 window 为 n ,用 while 循环。如果 p+n<size ,那么可以取的是[p,p+n),然后更新 p=p+n ;否则取[p,size),然后 break 。
kilasuelika
2022-03-20 00:50:41 +08:00
噢你这个是流文件读取。
那还是用取模,可以用一个缓存,取模恰好等于 0 时插入并清空缓存。
等文件全部读取后,再把缓存中的插入。
twing37
2022-03-20 01:05:36 +08:00
程序结束前检查 buffer 即可
tangdaoni
2022-03-20 13:24:44 +08:00
感谢大家。

@hannibalm @twing37 专业的,增加个判断就解决了
@kilasuelika 这种还没干过,有空你更新下你的代码,抄一下哈
ldyisbest
2022-03-20 17:14:23 +08:00
先全部读到内存,然后把数据分片,除了最后一片都是 100 ,最后有个 50 ,不会漏
agostop
2022-03-20 22:50:43 +08:00
同意楼上,分两步,先分片,再处理分片。
MoYi123
2022-03-21 10:26:00 +08:00
from itertools import groupby

ls = list(range(105))

for i, v in groupby(ls, key=lambda x: x // 10):
__print(i, list(v))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841555

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX