打印出以两个不同字符串输出开头的行?

时间:2017-10-11 20:53:35

标签: python python-2.7 python-3.x

我正在尝试扫描输入文件并打印出以某个字符串开头的部分行。文本文件是10000多行,但我只关注起始行,更具体地说是该行中的数据。为了澄清,这里有两行代码解释了我想说的内容。

inst "N69" "IOB",placed BIOB_X11Y0 R8  ,

inst "n0975" "SLICEX",placed CLEXL_X20Y5 SLICE_X32Y5  ,

这是我到目前为止所获得的代码:

searchfile = open("C:\PATH\TO\FILE.txt","r")
for line in searchfile:
    if "inst " in line: 
        print line
searchfile.close()

现在这很好,如果我正在寻找以“inst”开头的所有行,但我特别寻找以“inst”N“”或“inst”n“”开头的行。从那里,我想只提取以N或n开头的字符串。

我的想法是首先将这些行(如上所示)提取到新的.txt文件中,然后运行另一个脚本以仅获取具有N或n的行的部分。在上面的例子中,我只关心N69和n0975。有没有更简单的方法呢?

3 个答案:

答案 0 :(得分:1)

使用re.search()功能:

示例file.txt内容:

inst "N69" "IOB",placed BIOB_X11Y0 R8  ,
some text
inst "n0975" "SLICEX",placed CLEXL_X20Y5 SLICE_X32Y5  ,
text
another text
import re

with open('file.txt', 'r') as f:
    for l in f.read().splitlines():
        m = re.search(r'^inst "([Nn][^"]+)"', l)
        if m:
            print(m.group(1))

输出:

N69
n0975

答案 1 :(得分:1)

re模块。

re.finditer(r'^inst\s+\"n(\d+)\"', the_whole_file, re.I)

将返回所有匹配的迭代器。 对于每场比赛,您需要.group(1)来获得您想要的数字。

请注意,您无需先使用此方法过滤文件。您可以为整个文件执行此操作。

您案例中的输出将是:

69
0975

答案 2 :(得分:0)

这是一个解决方案:

with open('nfile.txt','r') as f:
    for line in f:
        if line.startswith('inst "n') or line.startswith('inst "N'):
            print line.split()[1]

对于文件startswith中的每一行,部分检查该行是否以您的一个目标图案开头。如果是,则使用split拆分该行并打印第二个组件,该组件是nN的组件。