0

私はblenderの簡単なスクリプトを作成していますが、Pythonを介して以前に作成したファイルからデータを取得するのに少し助けが必要です。

そのファイルは次のような構造になっています。

name first morph
values -1.0000 1.0000
data 35 0.026703 0.115768 -0.068769
data 36 -0.049349 0.015188 -0.029470
data 37 -0.042880 -0.045805 -0.039931
data 38 0.000000 0.115775 -0.068780
name second morph
values -0.6000 1.2000
data 03 0.037259 -0.046251 -0.020062
data 04 -0.010330 -0.046106 -0.019890
…

などもっと2k行;p

必要なのは、これらのデータを1行ずつ読み取り、ファイル行の最初の単語に応じてnames []values[]とdata[]の3つの異なる配列に値を配置するループを作成することです。

Manualy it should be like that:
names.append('first morph')
values.append( (-1.0000,1.0000))
data.append((35, 0.026703, 0.115768, -0.068769))
data.append((36, -0.049349, 0.015188, -0.029470))
data.append((37, -0.042880, -0.045805, -0.039931))
data.append((38, 0.000000, 0.115775, -0.068780))
names.append('second morph')
values.append( (-0.6000,1.2000))
…

'ファイル内の行に対してそのような種類の'for行を作成しようとする理由がわかりません:'ループが完全なデータよりも多くのエラーを作成している理由、範囲外になっている理由、または適切なデータを取得していない理由がわかりません

必要なパラメータをすでにファイルにエクスポートしているので、各行を手動で書き込むのではなく、そのプロセスを自動化する方法を教えてください。

4

2 に答える 2

2
names = []
values = []
data = []
with open('yourfile') as lines:
    for line in lines:
        first, rest = line.split(' ', 1)

        if first == 'name':
            names.append(rest)

        elif first == 'values':
            floats = map(float, rest.split())
            values.append(tuple(floats))

        elif first == 'data':
            int_str, floats_str = rest.split(' ', 1)
            floats = map(float, floats_str.split())
            data.append( (int(int_str),) + tuple(floats) )

なんでこんなに必要なの?次の名前がデータ リストと値リストのどこから始まるかをどのように知ることができますか?

于 2012-12-29T15:19:04.610 に答える
0

これは単純なpythonの「ラインイン」ソリューションです...呼び出すだけprocessed.pyです...

fp = open("data1.txt", "r")

data = fp.readlines()
fp1 = open("processed.py", "w")

fp1.write("names = []\nvalues=[]\ndata=[]\n")

for line in data:
    s = ""
    if "name" in line:
        s = "names.append('" + line[5:].strip() + "')"
    elif "values" in line:
        s = "values.append((" + ", ".join(line[7:].strip().split(" ")) + "))"
    elif "data" in line:
        s = "data.append((" + ", ".join(line[5:].strip().split(" ")) + "))"

    fp1.write(s + "\n");

fp1.close()
fp.close()
于 2012-12-29T15:19:12.143 に答える