我有一个数据记录器来记录温度。我想把这些数据和epoch时间保存在csv文件中。我尝试了以下代码,没有错误报告,但csv文件是空的。有人能帮我解决这个问题吗?
import board
import busio
import adafruit_mcp9600
import time
i2c = busio.I2C(board.SCL,board.SDA,frequency = 100000)
mcp = adafruit_mcp9600.MCP9600(i2c, 0x60, tctype = "J")
with open ("/home/pi/Documents/test.csv", "a") as log:
while True:
temp = mcp.temperature
temptime = time.time()
log.write("{0},{1}n".format(str(temptime),str(temp)))
time.sleep(1)
假设您正在导入的库工作正常,我认为这是因为写入程序没有刷新缓冲区,所以看起来什么都没有写入。
解决方案是在每次写入日志后使用log.flush()
进行刷新。
尝试一个更简单的例子:
A(
import time
def go():
i = 0
with open("/home/some/dir/test.csv", "a") as nice:
while True:
nice.write(f"hello,{i},{time.time()}n")
i += 1
time.sleep(5)
if __name__ == "__main__":
go()
与
B(
import time
def go():
i = 0
while True:
with open("/home/some/dir/test.csv", "a") as nice:
nice.write(f"hello,{i},{time.time()}n")
i += 1
time.sleep(5)
if __name__ == "__main__":
go()
当我在情况A中刷新文件时,似乎不会写入新行。不过,情况是B。
如果我修改案例A(并在每次写入后添加nice.flush()
,它就解决了这个问题。
以上两个区块只是为了展示您所看到的内容。我不是建议你这样做。最终,我不建议这样做,而是使用logging
包,并在您确实试图创建日志文件的情况下配置一个合适的记录器。