我有一个文本文件,可以检测活动的监视器数量。 我想从每一行中提取特定数据并将其包含在列表中。
文本文件如下所示:
[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 ..
我想做下一个:
一个。输入文本中的每一行
湾看看是否存在“UID”字符串
℃。如果它存在:拆分(这里我知道如何做它...拆分(“”)或(“&”)
你有什么好主意可以提供建议吗?我不明白如何在UID之后获取数字(例如,如果下一个数字比前一个更长) 我怎么能得到一个命令:(“如果你看到UID字符串,获取所有数据,直到你看到第一个空白”)
任何想法? 感谢
答案 0 :(得分:3)
我会使用正则表达式来提取ID e。
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 :(得分: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]
答案 2 :(得分: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
答案 3 :(得分:1)
这有点深奥,但有一些列表理解的技巧:
[this.split("UID")[1].split()[0] for this in txt.split("\n") if "UID" in this]
输出是您要查找的列表我认为:[' 68092928',' 51249920']
解释:
答案 4 :(得分: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
答案 5 :(得分:0)
您可以使用find()
方法:
if line.find('UID') != -1:
print line[line.find('UID') + 2 :]
答案 6 :(得分:0)
如果您一次读取整个文件,否则如果逐行将第一行更改为line.split()
for elem in file.split():
if 'UID' in elem:
print elem.split('UID')[1]
拆分将已经剥离“垃圾”每个包含'UID'字符串的元素都将设置为int()或只打印为字符串