V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tangdaoni
V2EX  ›  Python

一个的算法问题

  •  1
     
  •   tangdaoni · 2022-03-20 00:28:53 +08:00 · 2087 次点击
    这是一个创建于 767 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    @hannibalm @twing37 专业的,增加个判断就解决了
    @kilasuelika 这种还没干过,有空你更新下你的代码,抄一下哈
    ldyisbest
        6
    ldyisbest  
       2022-03-20 17:14:23 +08:00
    先全部读到内存,然后把数据分片,除了最后一片都是 100 ,最后有个 50 ,不会漏
    agostop
        7
    agostop  
       2022-03-20 22:50:43 +08:00
    同意楼上,分两步,先分片,再处理分片。
    MoYi123
        8
    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))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3387 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 11:51 · PVG 19:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.