2017-01-16 100 views
0

我正在尋找幫助來提取一個特定字段。使用Python提取字段

這裏是例如,我不能夠分裂並根據場數切口因爲數目可以改變由於內容改變

實施例1

[["cn","Phone",1,"","LI(\"\")","0","19%","",""],["OS_DisplayName","Display Name",1,"","LI(\"\")","1,0","19%","",""],["OS_ProductPackage","Product Package",1,"","CO(\"\",\"REQ;1_BASIC!OS!TRV;2_Messaging!OS!OEM;3_Extended!OS!EAC;4_Enhanced!OS!APO;5_Analog Port!OS!CCA;6_Contact Center Agent\",\"\",\";\",\"\",\"\")","2,0","19%","",""],["sn","Last name",1,"","LI(\"\")","3,0","12%","",""],["givenName","First name",1,"","LI(\"\")","4,0","12%","",""],["OS_SiteCode","Site Code",1,"","LI(\"\")","5,0","19%","",""]],[["917845678923","Backup","OEM","917845678923","","CNdd_RD_91784567","","cn=917845678923,cn=Subscribers,cn=np_CNdd_RnD_WangJing,cn=IPC_APAC_1_01,cn=DN,cn=Resources,cn=Users,cn=OS"]], 

輸出應該是

cn=917845678923,cn=Subscribers,cn=np_CNdd_RnD_WangJing,cn=IPC_APAC_1_01,cn=DN,cn=Resources,cn=Users,cn=OS 

實施例2

[["cn","Phone",1,"","LI(\"\")","0","19%","",""],["OS_DisplayName","Display Name",1,"","LI(\"\")","1,0","19%","",""],["OS_ProductPackage","Product Package",1,"","CO(\"\",\"REQ;1_BASIC!OS!TRV;2_Messaging!OS!OEM;3_Extended!OS!EAC;4_Enhanced!OS!APO;5_Analog Port!OS!CCA;6_Contact Center Agent\",\"\",\";\",\"\",\"\")","2,0","19%","",""],["sn","Last name",1,"","LI(\"\")","3,0","12%","",""],["givenName","First name",1,"","LI(\"\")","4,0","12%","",""],["OS_SiteCode","Site Code",1,"","LI(\"\")","5,0","19%","",""]],[["868694755000","Yaeng Danning","EAC","Yaeng","Dainning","CNdd_DT_86869475","","cn=868694755000,cn=Subscribers,cn=np_CNdd_DN,cn=IPC_APAC_1_01,cn=DN,cn=Resources,cn=Users,cn=OS"]], 

輸出應該

cn=868694755000,cn=Subscribers,cn=np_CNdd_DN,cn=IPC_APAC_1_01,cn=DN,cn=Resources,cn=Users,cn=OS 

有人可以幫助我在此。

我嘗試下面的代碼,但我不能夠使用恆定的申請號(E [8]),由於現場人數變化

e = line3.split('","","') 
    print "e" 
    print e 
    e = e[8].replace('"]],','').replace('","','').strip() 
    print "e:" ,e 
+0

'E = line3.split( '」, 「」, 「 ')' '打印e' 'E = E [8] .replace('」]], ''') .replace('「,'','')。strip()' 'print」e:「,e' –

+0

請編輯您的帖子 - 評論並非代碼的正確位置。 –

+0

我試過了,它正在工作現在我不能使用常量字段編號,您可以看到字段編號正在改變。 –

回答

1

如果你保證cn場的最後,你可以做類似的事:

cnFields = array [-1][-1] 

然後解析它,因爲你認爲合適。

否則,您需要遍歷2d數組,直到找到以cn=開頭的字符串。

+0

'>>> b = s [-1] [ - 1]' >>> >>> sd = b [+7]' '> >>打印sd'這工作對我來說,我們可以使用它在單行 –

2

您可以展開列表然後在其中搜索。

myList = (['one', 'two', ['cn=blahblah', 4, [5],['hi']], [6, [[[7, 'hello']]]]]) 

def flatten(container): 
    for i in container: 
    if isinstance(i, (list,tuple)): 
     for j in flatten(i): 
     yield j 
    else: 
     yield i 

flattenedList = list(flatten(myList)) 

for x in flattenedList: 
    if str(x).startswith('cn='): 
    print(x) 
+0

你能給我一個例子 –

+0

我寫了你的工作代碼...你應該的理由把你的列表放到名爲「myList」的變量中,這個變量將被展平成一個簡單的一維列表,你可以用一個簡單的循環進行分析。 – nullpointer17

+0

但是當我嘗試我的flattenedList打印鏈接下面'[[[','[','','c','n',''',',',''','P','h ','o','n','e',''',',','1',',','''','''','','''','L',' '''',''','''',''','''','''','''''''''''''''''''''''' '','''','1','9','%',''',',','''','''','','''','''' ''''''''''''''O'''S''I''L''A''''''''''''''''' '','','','','','','' ','','p','l','a','y','','N','a','m','e',''',',',',' 1',',','','',',',','',', –