2017-06-14 123 views
1

私はiniファイルカンマ区切りのiniファイルをPythonで読み込みますか?

私はカンマ区切りの値を持つ
[default] 
hosts=030, 031, 032 

を持っています。私は単純な全体の値を読むことができます

comma_separated_values=config['default']['hosts'] 

このように私は変数のすべての値を取得することができます。しかし、このINIファイルをどのように反復して、これらの値をむしろ変数としてリストとして保存することができます。

+0

[設定ファイルのセクションを繰り返す]の可能な複製(https://stackoverflow.com/questions/220) 68050/config-in-a-config-section-of-a-configファイル) – Martin

答えて

2

値が整数である必要があると仮定すると、カンマで区切られた文字列からリストを抽出した後に整数に変換したいと思うでしょう。

values_list = [int(str_val) for str_val in config['default']['hosts'].split(',')] 

、または各番号にゼロプレフィックスは、彼らが進であることを示していることになっている場合:

values_list = [int(str_val, 8) for str_val in config['default']['hosts'].split(',')] 
+0

ありがとうございました@David、上記の答えはまさに私が探していたものです...私はINIファイルを読むとき、それはUnicode型として格納されていましたが、あなたのコードはintとしてリストにも格納するのに役立ちました。 ありがとうございます。 – Rob

2

これらは文字列として読み込まなっているので、あなたがリストに

values_list = config['default']['hosts'].split(',') 
0

これを行うと、それを格納することができるはずあなたは、ファイルの内容を読み取るとスプリットを使用して、それを分割することができます(」、 ')。以下のコードを使って試してみてください。

with open('#INI FILE') as f: 
    lines = f.read().split(',') 
print(lines) # Check your output 
print (type(lines)) # Check the type [It will return a list] 
+0

ポスターは、カンマで区切られた値の文字列に 'config ['default'] ['hosts']'としてアクセスできることを示しました。これはINIファイルを(おそらく 'ConfigParser'モジュールのようなものを使って)すでに解析しており、' file.read() '関数でフォーマットされていないテキストとして解析しようとすると大きく後退します。 –

2

次のようにあなたはそれを一般化することができます

Colwinの答えに続き

import ConfigParser 
import io 

# Load the configuration file 
def read_configFile(): 
    config = ConfigParser.RawConfigParser(allow_no_value=True) 
    config.read("config.ini") 
    # List all contents 
    print("List all contents") 
    for section in config.sections(): 
     #print("Section: %s" % section) 
     for options in config.options(section): 
      if (options == 'port'): 
       a = config.get(section,options).split(',') 
       for i in range(len(a)): 
        print("%s:::%s" % (options, a[i])) 

      else: 
       print("%s:::%s" % (options, config.get(section, options))) 

read_configFile() 


config.ini 
[mysql] 
host=localhost 
user=root 
passwd=my secret password 
db=write-math 
port=1,2,3,4,5 

[other] 
preprocessing_queue = ["preprocessing.scale_and_center", 
"preprocessing.dot_reduction", 
"preprocessing.connect_lines"] 

use_anonymous=yes 
関連する問題