首页 > 解决方案 > 搜索字符串并在包含字符串的行之后打印 3 行

问题描述

我有这样的数据:

  direct vectors
 10.950000000  19.950000000  0.000000000     0.256410256  0.256410256 -0.256410256
 0.000000000  31.950000000  15.950000000    -0.256410256  0.256410256  0.256410256
 51.950000000  0.000000000  17.950000000     0.256410256 -0.256410256  0.256410256


 direct vectors
 1.950000000  1.950000000  0.000000000     0.256410256  0.256410256 -0.256410256  #print this line
 0.000000000  1.950000000  1.950000000    -0.256410256  0.256410256  0.256410256  #print this line
 1.950000000  0.000000000  1.950000000     0.256410256 -0.256410256  0.256410256  #print this line

 length of vectors
  0.50000000  0.50000000  0.50000000       0.007
  0.48979592  0.48979592  0.48979592       0.007
  0.47959184  0.47959184  0.47959184       0.007
  0.46938776  0.46938776  0.46938776       0.007

我想在包含“直接向量”的行之后打印最后 3 行。我的代码不起作用:

op_file = open(filename, 'r')
data_lines = op_file.readlines()
re_vectors = re.compile("direct vectors")
i = 0
for line in data_lines:
    if re_vectors.search(line):
        matrix = []
        for j in range(0, 3):
            parameters = data_lines[i+j+1].split()
            A = [float(parameters[0]), float(parameters[1]), float(parameters[2])]
            matrix.append(A)
        print(matrix)

我想要这样的输出:

     1.950000000  1.950000000  0.000000000
     0.000000000  1.950000000  1.950000000
     1.950000000  0.000000000  1.950000000

多谢!

标签: pythonpython-3.x

解决方案


你的代码永远不会改变i,所以总是打印相同的行。尝试i像这样递增:

op_file = open(filename, 'r')
data_lines = op_file.readlines()
re_vectors = re.compile("direct vectors")
i = 0
for line in data_lines:
    if re_vectors.search(line) is not None:
        matrix = []
        for j in range(0, 3):
            parameters = data_lines[i+j+1].split()
            A = [float(parameters[0]), float(parameters[1]), float(parameters[2])]
            matrix.append(A)
        print(matrix)
    i++

您的代码仍将打印两组三行(每个“直接向量”之后一组)。这与您问题中的描述不同。如果您只想要第二组三行(根据您的示例输出),那么@balderman 的答案会更好,并且具有更容易遵循的代码,并且如果您将其更改print(l)为:

parameters = l.split()
print(' '.join(parameters[0:3]))

推荐阅读