2017-04-25 92 views
0

輸入文件Test.ini:爲什麼下面的python代碼總是返回false?

;INTEGRITY_PERIOD=300 
INTEGRITY_PERIOD=100 

代碼:

key = None 
value = None 

with open('hmi.ini', 'r') as inifile: 
    for line in inifile: 
     if line.startswith(';INTEGRITY_PERIOD='): 
      continue; 
     if line.startswith('INTEGRITY_PERIOD='): 
      key, value = line.split("=") 
      break 

if value and value.isdigit(): 
    print(value) 
else: 
    print(300) 

上面的代碼總是返回300看起來ISDIGIT()無法工作或有什麼我的代碼錯了?

回答

5

您的行以行分隔符結尾,您沒有刪除。剝去線從起點和終點刪除空格:

key, value = line.strip().split("=") 

行分隔符(\n)不是一個數字:

>>> '100\n'.isdigit() 
False 
>>> '100'.isdigit() 
True 

而不是建立自己的解析器,可以考慮使用從該configparser module標準庫。它完全支持INI格式(包括使用;作爲評論)。

+0

在提供的代碼示例中選擇文本時,似乎有一些空格而不是換行符(儘管我不確定這是否僅僅是格式化問題)。在遍歷行時,不會自動省略新行嗎?無論如何,'.strip()'自然處理任何空格,無論它們是空格還是換行 –

+2

@LennartKloppenburg:不,不會刪除換行符。 –

+0

configparser模塊真的非常有用。謝謝你讓我知道這個圖書館。 –

相關問題