2016-05-04 9 views
1

Windowsサーバーのリストを検索するLDAPクエリを実行しました。返される結果はリストです。私はCNのフィルタを使用し、以下はレスポンスのサンプルです。私はrawファイルに1000を持っています。Python - LDAPクエリーからリストとして受け取った文字をどうやって削除しますか?

私は唯一の「SERVER1」または「SERVER2」

は何CNを= '削除する、このリストを分割するための最良の方法である、すべての後とを含むだろう、このサンプルでは、​​名前が必要

('CN=SERVER1,OU=General Servers,OU=Servers,OU=Computers,OU=Group,DC=Domain,DC=com', {}), 
('CN=SERVER2,OU=General Servers,OU=Servers,OU=Computers,OU=Group,DC=Domain,DC=com', {}) 

「」

誰かがホスト名を返すCNまたはsAMAccountNameを、より異なるフィルタを使用して

(r"(&(objectclass=computer)(objectcategory=computer)(operatingSystem=Windows*Server*)(cn=*))") 

よりも優れLDAPクエリを認識している場合、それは使用であろう実行可能な回避策として知ることができます。

答えて

0

あなただけ,を分割することができ、その後、=によって:CNdn文字列の先頭に常にある場合

>>> result = ('CN=SERVER1,OU=General Servers,OU=Servers,OU=Computers,OU=Group,DC=Domain,DC=com', {}) 
>>> result[0].split(",")[0].split("=")[1] 
'SERVER1' 

これが働くだろう。 CNの任意の位置のために働くだろう

別のオプションは、dnにキーと値のペアから辞書を作成に次のようになります、1 list comprehensionでそう

>>> d = dict(item.split("=") for item in result[0].split(",")) 
>>> d['CN'] 
'SERVER1' 
0

、すべてを想定して、あなたの結果リストは、あなたがそれを分割することができるように一部の人々は(かなり)、これはリストの内包のためにあまりにも混乱していることを文句を言うでしょう

hosts = [row[0].split(",")[0].replace("CN=","") for row in l] 

、Lと呼ばれています代わりに、その部分に。

編集:私は私がやったと第二の分割を使用するalecxeの方法として、()str.replaceを使用しての間に実質的な差があったかどうかを確認するために興味があった

。リストには5百万のエントリが含まれていて、それらの両方を実行しました。 (私はAlecxeのバージョンをリストの理解に変換しました)。有意な時間差はなかった。だから、あなたの毒を選んでください:)

+0

解決に感謝、記録のために働いた。私はちょうどalecxeの答えが私の状況で実装するのがやや簡単であることが分かりました。 – Terry

関連する問題