在将值存储在 csv 文件中以检查正确的列之前,我使用此代码将值与其关联的字段名进行比较,因为每次重新启动机器时,字典中传感器的顺序都会自动更改。这就是为什么我必须在将值存储到 csv 文件之前控制值在 dict 中的位置,否则我会得到一个像下面的示例一样的混乱 csv 文件,它提供值 tempatur 为 1000 [°C] 亮度 10 [lux]
import csv
from datetime import datetime
import os
import time
from collections import OrderedDict
from time import sleep
Datum = time.strftime("%Y-%m-%d")
Time = datetime.now().replace(microsecond=0).isoformat()
data = {'Stecker Energy': '2.37', 'Stromzaehler Strom L1 [A]': '0.0', '1OG Ultraviolet': '0.0','Stecker EG Energie [kWh]': '4.3'}
filename = Datum + 'SOF.csv'
if not os.path.isfile(filename):
outfile = open(filename, "w")
lineKey = ""
for x in data.keys():
lineKey+= x + ","
lineKey = 'Time '+ "," + lineKey[:-1]+"\n" # Delete last character and add new line
outfile = open(filename, "a")
outfile.write(lineKey)
outfile.close()
#check first line of fieldnames
with open(filename,'r') as myFile:
reader = csv.DictReader(myFile)
fieldnames = reader.fieldnames
myFile.close()
#Compare the values with their keys (fieldnames)
with open(filename,'a') as outfile:
lineValue = ""
for sensor, value in data.items():
if sensor in data.items()==sensor in fieldnames:
v = data[sensor]
print("v", v)
lineValue+= str(v) + ","
lineValue = Time + "," + lineValue[:-1] + "\n"
print(lineValue)
outfile.write(lineValue)
outfile.close()
问题是当我检查 CSV 文件时,我发现值写在错误的列中,这意味着 Examlpe 的字段名错误:
CSV 文件中此问题的示例
CSV 文本示例
时间,Stromzaehler Strom L1 [A],Stecker Energy,1OG Ultraviolet,Stecker EG Energie [kWh] 2017-11-21T17:56:10,2.37,0.0,0.0,4.3 2017-11-21T17:56:26,4.3, 0.0,0.0,2.37 2017-11-21T17:56:28,0,0.0,2.37,4.3 2017-11-21T17:56:30,0,2.37,0.0,4.3
data = {'Stecker Energy': '', 'Stromzaehler Strom L1 [A]': '', '1OG Ultraviolet': '','Stecker EG Energie [kWh]': ''}