1

私はpythonが初めてです。

以下に示すように、同じ順序で構成ファイルがあります。構成ファイルからキーと値のペアを取得する必要があり、それらの値をスクリプトで使用します

# Name and details 
( 
 { group => 'abc',
   host => 'pqr.com',
   user => 'anonymous',
   src => '/var/tmp',
   dest => '/tmp',
}, 
{ group => 'abc',
  host =>'pqr.com',
  user => 'anonymous',
  src => '/tmp'
  dest => '/var/tmp'
}, 
{ group => 'pqr',
  host =>'abc.com',
  user => 'xyz',
  src => '/home/pp',
  dest => '/var/tmp',
}, 
{ group => 'xyz',
  host =>'p.com',
  user => 'x',
  src => '/home/',
  dest => '/tmp',
} 

)

{

}

は 1 つのブロックと見なされます。Groupuserhostは一意であり、繰り返されます。構成ファイルを読み取って解析し、キーと値のペアを表示する必要があります。

Key : group,Value : 'abc'(say)
key : host ,Value :'pqr.com'
Key : user, Value :'anonymous'
Key : src,Value :'/var/tmp',
key : dest,Value : '/tmp'

ありがとうございました、


入力としてcfgファイル(上記)を取得してキーと値を表示するコードを作成しました。

idx = 0
dictList = []
while True:
try:
start = config.index("{", idx)
end = config.index("}", start+1)
slice = config[start+1:end-1]
sliceList = [s.strip() for s in slice.split(",") if s.strip()]
dd = {}
for item in sliceList:
key, value = [s.strip() for s in item.split("=>")]
print key, value

キー、値を表示しながら出力

key 'value'
group 'abc'
host 'pqr.com'
user 'ananymous'
src '/use/tmp

問題は、キーに対応する値をどのように表示するかです。例: print group- abc を表示する必要があります print host は pqr.com を表示する必要があります。

4

3 に答える 3

3

おそらくそれを解析する必要があります。これを行う方法の小さな例を次に示します。

import re
def parse(data):
    '''Parse data block, return itertator on objects inside'''
    for block in re.finditer('{[^}]*}', data, re.M):  # Split to objects
        obj = {}
        for match in re.finditer("([a-z]+) => '([^']*)'", block.group()):
            obj[match.group(1)] = match.group(2)
        yield obj

今、あなたには2つの問題があります:)

于 2012-04-28T15:34:13.973 に答える
2

http://docs.python.org/library/configparser.html

あなたはこれを試してみたいと思っています。

ただし、構成ファイルの形式は、より ini 形式に変更する必要があります

[section]
key = value

http://deron.meranda.us/python/demjson/

demjson は、python オブジェクト -> 文字列とその逆にも適しています。

私はこの状況でこれらを使用する傾向があります。

于 2012-04-30T00:01:41.730 に答える
2

あなたのデータは、Python で直接解釈するには少し形式が正しくありません。したがって、データを解釈する前にデータを処理する必要があります

  1. すべてのオカレンスを=>に変更::data.replace("=>",":")
  2. すべてのキーを引用します:re.sub(" (\w+) ",r"'\1'",data.replace("=>",":"))

あなたはそれをに与えることができますast.literal_eval

import re,ast
ast.literal_eval(re.sub(" (\w+) ",r"'\1'",data.replace("=>",":")))
于 2012-04-28T15:39:28.630 に答える