2017-04-25 6 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モジュールは本当に非常に便利です。このライブラリについて私に知らせてくれてありがとう。 –

関連する問題