如何记录“n”数字及其相应的时间?初学者任务

时间:2015-11-20 18:11:50

标签: python python-2.7

请耐心等待,我的问题并不像看起来那么令人生畏。一切都很完美,一直工作到第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”温度下进行修改?

3 个答案:

答案 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)