2017-10-26 12 views
0

ここにPythonが新しくあります。私はこのようになりますYAMLファイルに保存されているユーザーのリストを持っている:PythonはYAMLファイルを解析して値を出力します

users: 
    test: 
    dn: dc=test 
    cn: test 
    objectClass: 
     - inetOrgPerson 
     - person 
     - ldapPublicKey 
     - posixAccount 
    employeeType: inactive 
    test2: 
    dn: dc=test 
    cn: test2 
    objectClass: 
     - inetOrgPerson 
     - person 
     - ldapPublicKey 
     - posixAccount 
    employeeType: inactive 

私はwhosは従業員のタイプが非アクティブであるすべてのユーザーのために、このファイルを照会することができるようにしたい、と私は、ユーザー名を印刷したいです、上記の例ではtest2となります。私は次のスクリプトが書かれているが、それはすべてのユーザーを返す、誰かが私が行方不明に私を指すのに役立つことができますか?

#!/usr/bin/env python 
import os 
import yaml 
import ldap 


with open('ldap_users.yaml', 'r') as file: 
    doc = yaml.load(file) 

for employeeType, inactive in doc['users'].iteritems(): 
    print employeeType, inactive 

答えて

1

employeeTypeが実際に非アクティブであるかどうかはチェックしていません。

最後の行にインデントを修正するためにYAMLファイルを変更した後、私はあなたの問題を見ることができました。実際には、異なるテスト項目を反復していたときにemployeeTypeを反復処理していると仮定しました。私のコードでは、info変数は必要な情報を含む辞書です。

info = {'dn': 'dc=test', 'objectClass': ['inetOrgPerson', 'person', 'ldapPublicKey', 'posixAccount'], 'employeeType': 'inactive', 'cn': 'test'}

私は、従業員のタイプにアクセスする方法をお見せするようにコードを修正しました。私はあなたがこの小切手を実行した後に印刷したいものを正確には分かりませんが、うまくいけばあなたには明らかです。

#!/usr/bin/env python 
import os 
import yaml 
import ldap 


import yaml 
with open('ldap_users.yaml', 'r') as file: 
    doc = yaml.load(file) 


for test, info in doc['users'].iteritems(): 
    if info['employeeType'] == 'inactive': 
     print test 
関連する問題