我正在尝试扫描输入文件并打印出以某个字符串开头的部分行。文本文件是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。有没有更简单的方法呢?
答案 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
拆分该行并打印第二个组件,该组件是n
或N
的组件。