【发布时间】:2018-05-04 20:54:20
【问题描述】:
在我将其存储在 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 文件时,我发现值写在错误的列中,这意味着 Example 的字段名错误:
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]': ''}
【问题讨论】:
-
请发布您的 CSV 文件的文本版本,而不是图片。
-
@MartinEvans 我编辑了我的帖子。您可以在上面找到我的文本版本示例
-
data对象的内容是什么? -
也许您可以使用
csv.DictWriter类,而不是通过添加逗号和换行符等手动构造输出数据。这大大降低了错放分隔符的可能性,并且还使您的代码具有很好的对称感,因为它在前半部分已经使用了DictReader。 -
当我运行你的代码时,
print(fieldnames)显示['Time Temp Humidity Current ']看起来不对。该列表应该是四项,而不是一项。如果您的输入文件不包含任何逗号,那么我认为您需要配置 DictReader 以便它知道这一事实。
标签: python csv dictionary field-names