我是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)的载体。
答案 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矩阵。