Python 如何实时储存下位机发送的数据,数据要发送一天 - V2EX
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 4403 次点击
    这是一个创建于 2034 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
    PRO
       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     Solana     921 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 22:05 PVG 06:05 LAX 15:05 JFK 18:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86