2014-06-09 52 views
0

我有一個文本文件,用於檢測活動的監視器的數量。 我想從每一行提取特定數據並將其包含在列表中。python - 如何從文本文件中的每一行提取字符串?

文本文件看起來像這樣:

[EnumerateDevices]: Enumerating Devices. 
DISPLAY\LGD03D7\4&ACE0355&1&UID68092928      : Generic PnP Monitor 
DISPLAY\ABCF206\4&ACE0355&1&UID51249920      : Generic PnP Monitor 
// 
// here can be more monitors... 
// 
2 matching device(s) found. 

我需要在文字中間的UID後能得到數量:68092929,51249920 ..

我以爲做了下:

一個。在文本

b輸入每一行。看看 「UID」 串存在

℃。如果它存在:split(在這裏我知道該怎麼做..分割(「」)或(「&」)

有什麼好主意,你可以建議?我不明白我怎麼能得到(例如,如果下一個數字比前一個數字長) 如何獲得一個命令:(「如果您看到UID字符串,請獲取所有數據,直到看到第一個空白爲止」)

任何想法? 感謝

回答

2

使用正則表達式:

import re 
p =re.compile(r'.*UID(\d+)') 
with open('infile') as infile: 
    for line in infile: 
     m = p.match(line) 
     if m: 
      print m.groups[0] 
1

可以使用split()方法。

s = "hello this is a test" 
words = s.split(" ") 
print words 

上面的代碼片段的輸出是包含一個列表:['hello', 'this', 'is', 'a', 'test']

在你的情況,你可以在子「UID」分裂,然後在列表搶第二個元素來得到你要尋找的數。

查看文檔在這裏:https://docs.python.org/2/library/string.html#string.split

+0

問題是,我的第二個元素將包含「8982645:GenericPnp 「 - 我應該拿它並用(」「)再次分割並獲得第一個元素? – user1386966

+0

是的,你可以再分割一次。或者你可以使用像Woodham建議的正則表達式。 –

3

我會用一個常規的expresssion提取UID

例如

import re 

regexp = re.compile('UID(\d+)') 

file = """[EnumerateDevices]: Enumerating Devices. 
      DISPLAY\LGD03D7\4&ACE0355&1&UID68092928      : Generic PnP Monitor 
      DISPLAY\ABCF206\4&ACE0355&1&UID51249920      : Generic PnP Monitor 
      // 
      // here can be more monitors... 
      // 
      2 matching device(s) found.""" 

print re.findall(regexp, file) 
1

這是一個有點深奧,但不會把戲一些列表理解:

[this.split("UID")[1].split()[0] for this in txt.split("\n") if "UID" in this] 

輸出是你正在尋找我相信名單:['68092928','51249920']

說明:

  1. 分割文本行(拆分(「\ n」)
  2. 只選擇UID內(對於這一點......如果在這個「UID」)在剩餘行
  3. ,分離行使用「UID」。
  4. 你想在UID之後只保留一個元素,因此[1]
  5. 生成的字符串包含id和由空格分隔的一些文本,所以我們使用第二個split(),默認爲空格。
1
>>> for line in s.splitlines(): 
...  line = line.strip() 
...  if "UID" in line: 
...    tmp = line.split("UID") 
...    uid = tmp[1].split(':')[0] 
...    print "UID " + uid 
... 
UID 68092928      
UID 51249920 
0

如果你看過整個文件一次,否則,如果一行行只是改變了第一線對線.split()

for elem in file.split(): 
    if 'UID' in elem: 
     print elem.split('UID')[1] 

拆分將已經剝離「垃圾」做包含'UID'字符串的每個元素將全部設置爲int()或只是打印爲一個字符串

相關問題