2011-06-10 40 views
1

我有一個包含表單MACAddress = SOMEVALUE的特定行的textfile(實際上是.xml),並在其他行中混合使用。例如,一個典型的這種線是(在一行):HOWTO爲包含表單表達式的行解析文本文件VARIABLE = SOMEVALUE

<Adapter slot="3" enabled="false" MACAddress="080027671C79" cable="true" speed="0" type="Am79C973">

N.B.在上面的行中,SOMEVALUE正好是「080027671C79」。

所以,我想分析文件,並收集所有的SOMEVALUES。 我如何在python中執行此操作(重新找到?)?

在此先感謝。

回答

4

它是XML,所以使用XML解析器。例如:

from xml.dom.minidom import parse 

macs = [adapter.getAttribute("MACAddress") for adapter in 
     parse("file.xml").getElementsByTagName("Adapter")] 
0

不知道,我正確地知道什麼是MAC地址,但請細下面兩個選項:

輸入:

text = """ 
Adapter slot="3" enabled="false" Mcable="true" speed="0" type="Am79C973"> 
Adapter slot="3" enabled="false" MACAddress="080027671C79" cable="true" speed="0" type="Am79C973"> 
Adapter slot="3" enabled="false" MACAddress="080027671C71" cable="true" speed="2" type="Am79C973"> 
Adapter slot="3" enabled="false" MACAddress="080024671C79" cable="true" speed="1" type="Am79C973"> 
Adapter slot="3" enabled="false" MACAddress="080227671C79" cable="true" speed="1" type="Am79C973"> 
""" 

1)正則表達式:

from re import findall 
findall(r'(?i)(?<=MACAddress=\")\w{12}', text) 

2)字符串切片:

searchTxt = 'MACAddress="' 
searchLen = len(searchTxt) 
getMAC = lambda line: line[line.index(searchTxt) + searchLen: line.index(searchTxt) + searchLen + 12] 
map(lambda line: getMAC(line), (line for line in text.split() if searchTxt in line)) 
+0

@Artsiom Rudzenka請問**(?i)**部分是什麼? – eyquem 2011-06-13 08:15:49

+0

@eyquem - 忽略大小寫 - 例如案例無心無力 – 2011-06-13 08:21:23

+0

@Artsiom Rudzenka謝謝。你確定這是Python中可用的功能嗎?在我看來,它存在於其他語言中,但不在Python中。沒看過。請給我一個參考嗎?在Python中,忽略大小寫:** re.compile(pattern,re.IGNORECASE)** – eyquem 2011-06-13 10:39:23

0

正則表達式將是更快的工具。

Artsiom之一是太限制了,我想。我會做:

from re import findall 
findall('MACAddress=([^ \t]+)', text) 

但我認爲你想要什麼是報價之間。然後:。

from re import findall 
findall('MACAddress="([^"]+)"', text) 

是否有可能在someValue中你想趕上包含報價

相關問題