データが再帰的に取得されている間、Python を使用してファイルへの書き込みを実行しています。データが取得される順序がないため、書き込みが発生するたびに異なる順序でデータが取得され、問題が発生します。そのコンテンツを使用してファイルのデータをソートすることは可能ですか?
def search(l,new_result_set=["90058"]):
"""defines the search function"""
#90058 = Vishal Sharma's ID
#defines the list to which the names must be appended
name_result=[]
#gets the manager IDs
print "Searching" + "." * 5 + "\n"
base = "ou=active, ou=employees, ou=people, o=cisco.com";
scope = ldap.SCOPE_SUBTREE
#specifies that all the attributes of the entry should be returned
retrieve_attributes = None
#result_set = []
#specifies the amount of time that we are willing to wait
#for response from the server
timeout = 0
try :
for item in new_result_set:
#opens the file for appending the data to
file_manager = open(filename , 'a')
#file_update = open("update.txt" , 'w')
search_filter = "(&(city=Bangalore)"+"(manageruid=" + item +"))"
result_id = l.search(base, scope, search_filter, retrieve_attributes)
#results append to this list
result_set = []
while 1:
result_type, result_data = l.result(result_id,timeout)
if(result_data == []):
break
else:
"""appends the data to result_set"""
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)
name_result=[]
if len(result_set) == 0:
#uncomment this later
#print "No Results."
continue
else:
for i in range(len(result_set)):
for entry in result_set[i]:
name = entry[1]['cn'][0]
title = entry[1]['title'][0]
empNO = entry[1]['employeeNumber'][0]
#location = entry[1]['floor'][0] + " " + "floor" + " ," + "building : " + entry[1]['building'][0] + " , "+ entry[1]['city'][0]
managerID = entry[1]['manageruid'][0]
manager = entry[1]['manager'][0]
status = entry[1]['status'][0]
uid = entry[1]['uid'][0]
name_result.append(empNO)
#writes data to file_manager
file_manager.write("\n")
file_manager.write( "Name : " + name + "\n")
file_manager.write( "Title : " + title + "\n")
file_manager.write( "Employee number : " + empNO + "\n")
file_manager.write("Status : " + status + "\n")
#file_manager.write( "Location : " + location + "\n")
file_manager.write( "User ID : " + uid + "\n")
file_manager.write( "Manager ID : " + managerID + "\n")
file_manager.write( "Manager : " + manager + "\n" )
file_manager.write( "\n" )
if (len(result_set) > 0 ):
print "Number of Direct Reportees -- >" ,len(result_set),manager
search(l,name_result)
file_manager.close()
except ldap.LDAPError , e:
print e
ファイルのサンプル コンテンツ。すべてのレコードは以下のように表示されます。
名前 : シャジット 題名 : ** * *** 従業員番号: 12345 ステータス: アクティブ ユーザー ID: * 管理者 ID : xxxxx 管理者 : ヴィシャル**