1

私はPythonを初めて使用し、このサイトの検索と読み取りに関する多くの問題をすでに解決しています。しかし、今、私が尋ねる時が来ました...


以下の構造のtxtファイルがあります。

SETUP

    STN_NO  419430403
    STN_ID  "S1"
    INST_HT 1.545000;
END SETUP
SLOPE (TgtNo, TgtID, CfgNo, Hz, Vz, SDist, RefHt, Date, Ppm, ApplType, Flags)
    419430405,  "S2",   1,  0.000000,   98.799682,  12.056200,  1.700000,   18-10-2012/10:06:08.0,  0.000000,   107,    00000000;
    419430407,  "1",    1,  0.000052,   98.799806,  12.056800,  1.700000,   18-10-2012/10:06:16.0,  0.000000,   107,    00000000;
    419430409,  "2",    2,  78.734236,  99.822405,  17.919000,  0.000000,   18-10-2012/10:09:50.0,  0.000000,   107,    00000000;
    419430410,  "3",    2,  78.861726,  108.352791, 17.213700,  0.000000,   18-10-2012/10:10:10.0,  0.000000,   107,    00000000;
END SLOPE

SETUP
    STN_NO  419430459
    STN_ID  "1"
    INST_HT 1.335000;
END SETUP
SLOPE (TgtNo, TgtID, CfgNo, Hz, Vz, SDist, RefHt, Date, Ppm, ApplType, Flags)
    419430462,  "S1",   5,  122.545107, 99.563594,  12.056300,  1.700000,   18-10-2012/11:04:36.0,  0.000000,   107,    00000000;
    419430464,  "50",   5,  200.000125, 99.563463,  12.058800,  1.700000,   18-10-2012/11:04:44.0,  0.000000,   107,    00000000;
    419430466,  "51",   6,  60.723043,  95.842462,  8.607300,   0.000000,   18-10-2012/11:06:36.0,  0.000000,   107,    00000000;
    419430467,  "52",   6,  99.683958,  95.664912,  7.581100,   0.000000,   18-10-2012/11:08:15.0,  0.000000,   107,    00000000;
    419430468,  "53",   6,  101.389131, 87.173327,  7.853000,   0.000000,   18-10-2012/11:08:51.0,  0.000000,   107,    00000000;
END SLOPE
END THEODOLITE

問題は、各行の末尾に適切な INST_HT 値を追加したいことです (つまり、SLOPE と END SLOPE の間のデータの最初のブロックに 1.545000、2 番目に 1.335000 など)。

目標は、TgtID、Hz、Vz、SDist、RefHt 列 (既に実行済み) および INST_HT (見逃した!!!) の数値データを含む適切な csv ファイルを作成することです。

これまで私が行ったことは、ファイルの最初から最後までのすべての INST_HT 値を含むリストを作成することだけでした。

何か案は?

4

2 に答える 2

0

これは、説明した問題に対して機能するはずです。

INST_HT = [1.545000,
           1.335000]
lines = open('tmp.txt')
out = open('tmp2.txt', 'w')
i = -1
while True:
    try:
        line = lines.next()
    except StopIteration:
        break
    if 'slope' in line.lower():
        i += 1
        out.write(line)
        while True:
            line = lines.next()
            if 'end slope' in line.lower():
                out.write(line)
                break
            else:
                out.write('    ' + line.strip()[:-1] + ', ' + str(INST_HT[i]) + ';\n')
    else:
        out.write(line)
out.close()
于 2013-06-25T20:29:41.243 に答える