在文本文件中查找矩阵

时间:2013-11-27 09:56:27

标签: python matrix

我是python初学者,我正在尝试从我的数据文件中提取矩阵。该文件包含有关测量的一些参数的信息,e.i。文字+数字。我想提取放在单词“#UBI:”和“#translation”之间的矩阵。该文件包含数百个这样的矩阵。所以这是我试图运行的代码 - 它给了我一些结果,但似乎有一个无限循环 - 它永远不会停止:

inF = open("C:/Python27/allgrainmap3.map")

line=inF.readline()

while True:
    inF = open("C:/Python27/allgrainmap3.map")
    outF = open("matrices.txt", "w")
    keepCurrentSet = False
    for line in inF:

        if line.startswith("#translation"):
            keepCurrentSet = False

        if keepCurrentSet:
            outF.write(line)

        if line.startswith("#UBI:"):
            keepCurrentSet = True

    if not line: break

inF.close()
outF.close()

文件块看起来像:

translation 4141 14141
bla bla 
bla bla 
UBI: 1 2 3 4 5 6 7 8 9 # this is the matrix I want 

翻译...... 在adition中 - 我只想要我的矩阵e.i的最后一列。载有(3 6 9)的载体。

1 个答案:

答案 0 :(得分:0)

您在代码中打开输入文件两个不同的位置,这似乎不是您想要做的。

此外,我没有看到while True:的目的,这可能是无限循环的原因......

在我看来,这会起作用

inF = open("C:/Python27/allgrainmap3.map")
outF = open("matrices.txt", "w")
keepCurrentSet = False
for line in inF:

        if line.startswith("#translation"):
            keepCurrentSet = False

        if keepCurrentSet:
            outF.write(line)

        if line.startswith("#UBI:"):
            keepCurrentSet = True

inF.close()
outF.close()

现在,如果你想在将它写入outfile之前只保留最后一列,那么:

 if keepCurrentSet:
   vector = line[9::3]
   outF.write(vector)

这仅适用于您当前的矩阵:如果更改列数,则必须计算要保留在切片中的元素。

编辑:如果矩阵中有数字而不是单个数字:

line = "UBI: 101 223 33456 40 51 63 75 86 99"
fields = line.split()
vector = fields[3::3]
print(vector)

仅适用于3x3矩阵。