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

2024-04-20 01:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图扫描一个输入文件并打印出以某个字符串开头的部分行。文本文件是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。有没有更简单的方法?你知道吗


Tags: 文件数据字符串代码intxtline文本文件
3条回答

是的,re模块。你知道吗

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

将返回所有匹配项的迭代器。 对于每个匹配,您都需要执行.group(1)以获得所需的数字。你知道吗

请注意,您不需要首先使用此方法筛选文件。你可以为整个文件做这个。你知道吗

在您的案例中,输出将是:

69
0975

使用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

这里有一个解决方案:

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的部分。你知道吗

相关问题 更多 >