2016-07-15 35 views
0

写入文件时出现问题。 似乎发生的情况是程序以0,1,2,3的顺序打印数字(第零,第一,第二,第三),但以-1,0,1,2的顺序写入文件。即使在print to screen命令在写入文件命令之后执行。 示例代码如下。任何想法如何使它写入文件的顺序0,1,2,3?写入文件并打印到彼此不同步屏幕

非常感谢 - Scriptham。

import random 
import time 

ln = 4 
mins = 10 
j = 0 
n_sensor = 0 
temp_c = 0 
data_file = "/home/pi/laboratory/test.csv" 

def read_temp(): 
    temp_c = 100 * random.random() 
    return str("%.3f"% temp_c) 


for j in range (1,mins): 
    f = open(data_file,'a') 
    f.write("\n" + str(j)) 
    f.close 
    for n_sensor in range (0,ln): 
     #device_file_1 = 
     print("A " + str(n_sensor)) 
     x = read_temp() 
     f = open(data_file, 'a') 
     f.write("," + x) 
     f.close 
     print("OP temp_c = ", x) 
     #time.sleep(0.5) 
    time.sleep(10) #normally would be 59.5 or 60 or similar 

quit() 

回答

1

为确保文件始终处于关闭状态,应使用with语句。 例如:

with open(data_file, 'a') as f: 
    f.write("\n" + str(j)) 

这将关闭该文件,即使write期间发生异常。

或者,你需要使用类似:

f = open(data_file, 'a') 
try: 
    f.write("\n" + str(j)) 
finally: 
    f.close() 
+0

三江源这对你的意见,该方案现在可以正常工作。问题解决了。 ScriptHam – scriptham

+0

如果您的问题已得到解答,请将其中一个解决方案标记为正确。 –

+0

谢谢skyhisi。我不确定如何标记事情是正确的。有关信息的两部分都用于解决问题。 – scriptham

4

问题很可能是您打开输出文件几十次,但从不关闭它。

你应该循环只有一次f = open(data_file,'a')。然后当一切都完成后,致电f.close()f.close不等于f.close()!)。