实时处理程序将来自吉时利数字万用表的新数据附加到 csv 文件中,而不会覆盖数据

问题描述

此项目的当前代码

>>> import py2700 as DMM
>>> import time
>>> from datetime import datetime
>>> import pandas as pd

>>> my_multimeter = DMM.Multimeter('TCPIP::169.254.69.212::1394::SOCKET')
>>> time.sleep(5)
>>> my_multimeter.set_temperature_units('C')
>>> my_multimeter.set_timeout(100000)
>>> my_multimeter.define_channels([101,102,103,104,105],DMM.MeasurementType.resistance())
>>> my_multimeter.setup_scan()
>>> result = my_multimeter.scan(time.time_ns()/(10**9))
>>> print(my_multimeter.make_csv_header())
Channel 101 Time (s),Channel 101 Value (Ohms),Channel 102 Time (s),Channel 102 Value (Ohms),Channel 103 Time (s),Channel 103 Value (Ohms),Channel 104 Time (s),Channel 104 Value (Ohms),Channel 105 Time (s),Channel 105 Value (Ohms)

>>> type(my_multimeter.make_csv_header())
<class 'str'>
>>> print(result.make_csv_row())
1614183965.0267806,19.7630787,1614183965.3737216,19.82827,1614183965.7207227,19.8339138,1614183966.0677166,19.8570061,1614183966.4147205,19.8999825

>>> type(result.make_csv_row())
<class 'str'>
>>> result
<py2700.Multimeter.ScanResult object at 0x11708DC0>
>>> print(result)
['+1.97630787E+01OHM','+0.000000SECS','+00000RDNG#','+1.98282700E+01OHM','+0.346941SECS','+00001RDNG#','+1.98339138E+01OHM','+0.693942SECS','+00002RDNG#','+1.98570061E+01OHM','+1.040936SECS','+00003RDNG#','+1.98999825E+01OHM','+1.387940SECS','+00004RDNG#']



>>> list1= result.make_csv_row()
>>> list1
'1614183965.0267806,19.8999825\n'

>>> list1[0::2]
'11136.270,9737711136.771,988711136.272,9831811136.676,9870111136.170,98985'
>>> print(list1)
1614183965.0267806,19.8999825

>>> type(list1)
<class 'str'>
>>> channel1=list1[19:28]

>>> print(channel1)
19.763078


>>> with open("random.csv","w") as fp:
    fp.write(channel1)

所需输出示例:每分钟从样品中收集电阻数据

             Channel 1| Channel 2| channel 3| channel 4| Channel 5

测量 1 | 9.53 | 10.53 | 13.91 | 9.67 | 9.13
测量 2 | 9.56 | 10.55 | 13.92 | 9.61 | 9.15

测量 3 | 9.72 | 10.96 | 13.94 | 9.68 | 9.12

测量 4 | 9.89 | 10.56 | 13.93 | 9.65 | 9.11

测量 5 | # | # | # | # | #

忽略时间戳,我只想要每分钟的新电阻测量值。

解决方法

如果主要问题是代码每次都覆盖数据,那么你在使用open时应该使用模式“a”而不是“w”,像这样:

with open("random.csv","a") as fp:
    fp.write(channel1)

"a" 代表追加,而 "w" 代表写入,它将始终覆盖整个文件。然后,如果您想进行连续测量,您应该使用一些 powershell 或 bash 命令定期运行脚本,尽管更简单的方法是将您想要连续运行的代码的主要部分放在像这样的 while 循环中:

#import libraries

while True:
    # take the measurements
    # format the data
    # save the new measurements
    with open("random.csv","a") as fp:
        fp.write(channel1)
    #time.sleep(5)

现在当您运行脚本时,它将大约每 5 秒进行一次测量(取决于您的处理时间),直到您停止程序。

编辑 将您的字符串转换为列表:

real_list = list1.split(',')

然后你需要格式化你的输出,如果你想使用管道符号:

string_to_append = " | ".join(real_list)

你会在这里使用这个 string_to_append 变量:

with open("random.csv","a") as fp:
    fp.write(string_to_append)

这将写一行,其中每个测量值由“|”符号分隔,您可以将其更改为您想要的任何内容。

我也看到您导入了 Pandas,但没有使用它,所以我也建议您研究一下,pandas 在处理表格数据、csv 文件等时非常有用,它可能使编写和格式化输出更容易还有大量关于如何在堆栈溢出时使用 Pandas 的信息。