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
cherishxyn
V2EX  ›  Python

Python 如何实时储存下位机发送的数据,数据要发送一天

  •  
  •   cherishxyn · 2020-03-20 13:23:39 +08:00 · 3951 次点击
    这是一个创建于 1713 天前的主题,其中的信息可能已经有所发展或是发生改变。
    python 如何实时储存下位机发送的数据,因为可能下位机要工作一天,不停的通过串口发送工作参数,本来想着储存成 excel,这样以后用的时候打开 excel 分析就行了,但是不是储存数据多,每次存储必须要打开 excel,这样的话会卡吗,有没有什么储存的方式比较快捷,有没有可能不打开 excel 追加存储,或者其他存储方式,

    新手诚心请教,因为自己做下位机,很多时候只通过串口不是很方便,于是,就想着自己用 python+pyqt 做个界面,以后自己可以通用。
    37 条回复    2020-03-23 13:38:03 +08:00
    whileFalse
        1
    whileFalse  
       2020-03-20 13:32:08 +08:00 via iPhone
    不考虑数据库吗
    cherishxyn
        2
    cherishxyn  
    OP
       2020-03-20 13:33:36 +08:00
    @whileFalse
    如果真的要用数据库,我就在多花些时间,我用的功能不复杂,谢谢您的回复
    ipwx
        3
    ipwx  
       2020-03-20 13:35:17 +08:00
    。。。你先随便找个格式存储,每过一天批量转换成 excel 不就行了???
    cherishxyn
        4
    cherishxyn  
    OP
       2020-03-20 13:39:26 +08:00
    @ipwx 你的意思是,比如果存储成 json,如果不停的向里面添加数据,数据多了会卡吗,是不是每次添加数据前都要打开,这样随着数据多,是不是意味着就卡了
    bearqq
        5
    bearqq  
       2020-03-20 13:41:55 +08:00 via Android
    建议存.csv ,格式了解一下
    同时数据量到一定时候就分文件
    处理大量数据也不建议用 excel,建议自己撸 python
    数据注重查询的话可以用数据库,否则直接存文件也没问题
    ipwx
        6
    ipwx  
       2020-03-20 13:42:07 +08:00
    @cherishxyn 你为啥每次添加记录都要打开一遍文件。

    保持一个开着的文件,写一个后台线程存储,前台线程接收数据不就行了么?
    Juszoe
        7
    Juszoe  
       2020-03-20 13:42:16 +08:00 via Android
    sqlite 不知道符不符合你的需求
    ipwx
        8
    ipwx  
       2020-03-20 13:42:18 +08:00
    另外每天换一个文件。
    loading
        9
    loading  
       2020-03-20 13:43:57 +08:00 via Android
    存 sqlite 或者更粗暴存 txt,
    一个数据一行,文本好分析,配合文本工具,多大文件都能秒开。
    loading
        10
    loading  
       2020-03-20 13:45:06 +08:00 via Android
    你只要花几分钟看看 python 如何读一个文件就行了,按行读取。
    cherishxyn
        11
    cherishxyn  
    OP
       2020-03-20 13:45:40 +08:00
    @ipwx 因为我想着如果掉点了,就没了,不过,现在想来,省事的话就可以用这种,毕竟我要求不是特别严格,只不过占些内存而已,看大家的回答,我想这几天在学习下数据库
    ipwx
        12
    ipwx  
       2020-03-20 13:46:10 +08:00
    @cherishxyn

    f.flush()
    open('xxx.txt', 'a')
    mazyi
        13
    mazyi  
       2020-03-20 13:46:27 +08:00
    这不是 python 的问题,是设计问题
    ipwx
        14
    ipwx  
       2020-03-20 13:46:56 +08:00
    @cherishxyn 而且文件缓冲区是固定的,不是说 f.close 之前就不存任何数据进去,而是 f.close 之前没打满缓冲区或者没调用 .flush() 就不写入。超过缓冲区大小会写入一批的。
    loading
        15
    loading  
       2020-03-20 13:56:38 +08:00 via Android
    物联网用的多的是时序数据库,你了解一下,应该很适合你。
    cherishxyn
        16
    cherishxyn  
    OP
       2020-03-20 13:57:31 +08:00
    @ipwx 谢谢,明白了
    Ediacaran
        17
    Ediacaran  
       2020-03-20 13:59:37 +08:00 via iPhone
    Append csv 文件
    cherishxyn
        18
    cherishxyn  
    OP
       2020-03-20 14:00:22 +08:00
    @loading 感谢仁兄的传授
    cherishxyn
        19
    cherishxyn  
    OP
       2020-03-20 14:12:42 +08:00
    @bearqq 谢谢
    qile1
        20
    qile1  
       2020-03-20 17:46:38 +08:00 via Android
    检验科仪器每天都传输数据,一般通用方法是保存一份 txt 文件,同时解析一份结果保存一份到数据库
    iceecream
        21
    iceecream  
       2020-03-20 17:55:52 +08:00
    csv 不香吗,既可以 tail、cat、awk 当文本打开,也可以走 excel
    Vegetable
        22
    Vegetable  
       2020-03-20 18:05:20 +08:00
    csv,sqlite 这两个。
    别 Excel,Excel 行数有上限,一百多万行。.xls 只有 65535 行。操作 Excel 也需要更多内存,速度会比想象的慢,OOM 也来的更早。
    littlewing
        23
    littlewing  
       2020-03-20 18:06:54 +08:00 via iPhone
    sqlite
    shm7
        24
    shm7  
       2020-03-20 19:34:01 +08:00 via iPhone
    没吃过没看过很多日志采用滚动记录的方式么,每个日志文件设定上限 size… 数字的话当文本存 txt csv flush 一下 多写几个 try catch
    ackoly
        25
    ackoly  
       2020-03-20 19:40:26 +08:00 via iPhone
    csv 加 pandas 不香吗
    bitdust
        26
    bitdust  
       2020-03-20 20:13:05 +08:00
    python 内置的 log 库,很香的。
    1.自定义格式
    2.做滚动存储
    3.远程存储
    4.自动打时间戳
    sintrb
        27
    sintrb  
       2020-03-20 21:53:47 +08:00
    用 csv 吧,csv 有个好处是格式简单,能够直接用 excel 打开。
    用追加模式打开 csv 文件,不停的往里面写入数据就行,写了之后 flush 一下,防止掉电丢失,类似下面的:

    import time, random, datetime, io
    def read():
    return random.random()
    with io.open('/tmp/t.csv', 'a', encoding='utf8') as f:
    while True:
    v = read()
    l = '%f,%f\n' % (time.time(), v)
    if type(l) != type(u''):
    l = l.decode('utf8')
    f.write(l)
    f.flush()
    time.sleep(1)
    sintrb
        28
    sintrb  
       2020-03-20 21:59:16 +08:00
    @sintrb 把下划线换成空格
    sintrb
        29
    sintrb  
       2020-03-20 21:59:50 +08:00
    @sintrb 把下划线换成空格

    import time, random, datetime, io

    def read():
    __return random.random()

    with io.open('/tmp/t.csv', 'a', encoding='utf8') as f:
    __while True:
    ____v = read()
    ____l = '%f,%f\n' % (time.time(), v)
    ____if type(l) != type(u''):
    ______l = l.decode('utf8')
    ____f.write(l)
    ____f.flush()
    ____time.sleep(1)
    cherishxyn
        30
    cherishxyn  
    OP
       2020-03-21 08:56:34 +08:00
    @sintrb 非常有用,谢谢,就用这个方式了。后面我继续学习数据库,到时候再从新做一个。楼上很多人说的非常实用,感谢,学习很多
    cherishxyn
        31
    cherishxyn  
    OP
       2020-03-21 08:57:39 +08:00
    @Vegetable 学习了,感谢
    cherishxyn
        32
    cherishxyn  
    OP
       2020-03-21 08:58:24 +08:00
    @bitdust 这个对我来说是新东西,我会去查看的,谢谢回复
    cherishxyn
        33
    cherishxyn  
    OP
       2020-03-21 09:02:04 +08:00
    我还有个问题想问下,就是大家回复的对我很有帮助,我是否有必要在下面一一回复感谢,回复多了,整个页面很多客套话,后来人也不便阅读,不回复显得不礼貌,该怎么办呢
    jianghu52
        34
    jianghu52  
       2020-03-21 12:47:58 +08:00
    @cherishxyn 你可以最后回帖的时候 @一圈人,感谢一下就行了.另外,如果可能的话,最好把你最后修改之后的结果也贴上来,这样很多人还会帮你看看哪里还有不足.
    cherishxyn
        35
    cherishxyn  
    OP
       2020-03-23 12:31:02 +08:00
    @jianghu52 好的,我现在最开始构思的,估计还要一段时间做出来,谢谢
    cherishxyn
        36
    cherishxyn  
    OP
       2020-03-23 12:33:06 +08:00   ❤️ 1
    @sintrb
    @bitdust
    @ackoly
    @shm7
    @Vegetable
    @iceecream
    @qile1
    @ipwx
    @loading
    @loading
    @ipwx
    @bearqq

    谢谢各位,刚知道,可以统一感谢
    loading
        37
    loading  
       2020-03-23 13:38:03 +08:00 via Android
    @cherishxyn 每层楼都有一个空心的爱心,点一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:29 · PVG 18:29 · LAX 02:29 · JFK 05:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.