如何从文本文件中的每一行中提取字符串?

时间:2014-06-09 14:05:06

标签: python parsing text split

我有一个文本文件,可以检测活动的监视器数量。 我想从每一行中提取特定数据并将其包含在列表中。

文本文件如下所示:

[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字符串,获取所有数据,直到你看到第一个空白”)

任何想法? 感谢

7 个答案:

答案 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']

解释:

  1. 将文本拆分为行(拆分(" \ n")
  2. 仅选择内部带有UID的行(对于此...如果" UID"在此处)
  3. 在剩余的行中,使用" UID"进行拆分。
  4. 你想在UID之后只保留一个元素,因此[1]
  5. 结果字符串包含id和一些用空格分隔的文本,因此,我们使用第二个split(),默认为空格。

答案 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 :]

文档https://docs.python.org/2/library/string.html#string.find

答案 6 :(得分:0)

如果您一次读取整个文件,否则如果逐行将第一行更改为line.split()

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

拆分将已经剥离“垃圾”每个包含'UID'字符串的元素都将设置为int()或只打印为字符串