请耐心等待,我的问题并不像看起来那么令人生畏。一切都很完美,一直工作到第4节。
def readTemperature():
"""It will read the string, extract the temperature, then return the data
as a float.
"""
data = readTemperatureSensor.randomTemperatureGenerator()
data = str(data)
for line in data:
if "t" in line:
tempBit = data.split("t")
tempString = tempBit[1].replace("=", "")
return float(tempString)/1000
上面的代码只是读取温度。
def getTemperatures(n):
"""Returns a list of floats that contain a certain number (n) of
temperature readings that have been sampled at an interval of one second.
"""
temperaturelist = []
for data in range(n):
temperaturelist.append(float(readTemperature()))
time.sleep(1)
return temperaturelist
上面的代码获得了一堆相隔一秒钟的温度。
def getTimeStamp():
"""Returns the current system date and time as a string with the format
YYYY_MM_DD_HH_MM_SS.
"""
return time.strftime("%Y_%m_%d_%H_%M_%S")
只是一个简单的时间戳。
现在,我不知道该怎么做。
def logTemperatures(n):
"""This function will record "n" temperature readings and their
corresponding time-stamps, sampled at 1 seconds intervals.
"""
基本上,它要我创建一个文本文件(我可以做),但也希望我读取“n”个温度,并且也有相应的时间。如果它只是记录一定量的温度,那么我可以做到,我的代码看起来像这样:
f = open('logTemperatures.txt', 'w')
type(f)
myList = getTemperatures(3)
currentTime = time.time()
f.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime - 0.03 * 60))))
f.write(',')
f.write(" ")
f.write(str(myList[0]))
f.write('\n')
f.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime - 0.02 * 60))))
f.write(',')
f.write(" ")
f.write(str(myList[1]))
f.write('\n')
f.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime - 0.01 * 60))))
f.write(',')
f.write(" ")
f.write(str(myList[2]))
f.close()
logTemperatures(3)
有很多f.write函数,因为我还是初学者,但我现在知道我可以使用+按钮将它全部链接起来。
文本文件如下所示:
时间,温度1
时间+ 1秒,温度2
时间+ 2秒,温度3
它可能高达10个温度或只有1.显然,上述代码不起作用,因为它只会在3个温度而不是“n”温度下进行。如何修改它以便在“n”温度下进行修改?
答案 0 :(得分:0)
您可以编写一个函数,该函数接收温度列表并迭代列表中的每个项目,并在日志文件中为其创建条目。
def logTemps(tempList):
with open('logTemperatures.txt', 'w') as outfile:
currentTime = time.time()
for i, temp in enumerate(tempList):
outfile.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime - 60 * (0.01 * (len(tempList) - i))))))
outfile.write(', ' + str(temp) + '\n')
您可以通过将前一个示例中的myList
输入到该函数来调用该方法:
logTemps(myList)
我提到过几件事:
使用with open('example.txt', 'w') as yourVariableNameHere
块而不是open()
和close()
。带有文件的with
块会自动关闭块末尾的文件,并清楚地向任何阅读代码的人表明您正在做什么。
我做了0.01*the length of the list - the current index
,但我希望你意识到这意味着你最终会得到currentTime - 3, currentTime - 2, and currentTime - 1
...而不是currentTime, currentTime + 1, currentTime + 2
你似乎在思考。
此外,没有理由在不同的行上分隔这些写入,所以我只是将它们合并为一个outfile.write('...')
答案 1 :(得分:-2)
您需要For
循环。您的for
函数中已经有一个迭代getTemperatures
循环,它会创建一个长度为n
的数组。现在你需要一个for
循环,按索引迭代:
for i in range(len(myList)):
f.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime + i))))
f.write(',')
f.write(" ")
f.write(str(myList[i]))
f.write('\n')
注意i
是一个数字(即0,1,2 ......),所以我们通过将i
添加到currentTime
得到时间,我们从数组中得到温度像这样myList[i]
。我相信currentTime
只需几秒钟,因此添加i
会增加一秒钟。
因此,在logTemperatures(n)
函数中,您可以调用getTemperatures(n)
来获取温度数组。然后使用类似于上面所示的代码遍历数组,将结果写入文件。
希望有所帮助,原谅我粗暴的回答。第一次发布答案:)
答案 2 :(得分:-3)
在python 3中
n = input("Enter the number: ")
然后:
myList = getTemperatures(n)
currentTime = time.time()
for data in myList:
f.write(str(time.strftime("%Y_%m_%d_%H_%M_%S",
time.localtime(currentTime - 0.02 * 60))))
f.write(',')
f.write(" ")
f.write(str(data))
f.write('\n')
f.close()
logTemperatures(n)