2015-09-05 52 views
0

我正在記錄電壓讀數與時間。我希望電壓低於10進入logfile1.txt,電壓高於10進入第二個文件logfile2.txt。以下腳本將10以下的電壓寫入logfile1.txt中,但對於10以上的電壓,則不會寫入logfile2.txt中。腳本的底部部分將被忽略。我怎樣才能讀取第二個日誌文件?如何從同一個python程序寫入兩個單獨的日誌文件?

import sys, time, signal 
    from time import time, sleep 
    from Adafruit_ADS1x15 import ADS1x15 

    ADS1115 =0x01 
    adc = ADS1x15(ic=ADS1115) 

    while True: 
     with open('logfile1.txt', 'w') as f: 
      while True: 
       volts = adc.readADCDifferential01(256, 8) 
       print volts 
       sleep(1) 
       if volts < 10: 
       print >> f, time(), (volts) 

     with open('logfile2.txt', 'w') as f: 
      while True: 
       volts = adc.readADCDifferential01(256, 8) 
       print volts 
       sleep(1) 
       if volts > 10: 
        print >> f, time(), (volts)  
+1

該程序有兩個無限循環。第三個while循環不會被擊中?你應該只使用日誌包,並添加兩個文件處理程序。 –

+0

如果你想保持這個程序沒有日誌記錄,只需在第一個塊中打開這兩個文件,如下所示:http://stackoverflow.com/a/4617069/4080476 –

+0

謝謝Brian,我會研究你的建議。 – Rico

回答

3

涉及第二個日誌文件的代碼被忽略,因爲第一個日誌文件的內部循環永遠不會結束。爲了讓你的代碼寫入這兩個文件,你需要合併這些循環。您也將能夠擺脫最外層循環過的:

with open('logfile1.txt', 'w') as f1, open('logfile2.txt', 'w') as f2: 
    while True: 
     volts = adc.readADCDifferential01(256, 8) 
     print volts 
     sleep(1) 
     if volts < 10: 
      print >> f1, time(), volts 
     else: # volts >= 10 
      print >> f2, time(), volts 

注意,對於打印到第二個文件的邏輯是比你原來的代碼略有不同。我正在使用相當於elif volts >= 10else。如果您的原始代碼已經工作,完全沒有記錄10伏的讀數,我猜這是一個疏忽。如果您想要精確的10伏讀數而不是第一個文件,可以將< 10更改爲<= 10

+0

你的天才,很棒! – Rico

相關問題