0

私はプログラミングの完全な初心者であり、Python についてはさらに初心者です (C++ でいくつかの基本的なものを作成できます...)。

少し前に友人が作ってくれたコードに取り組んでいて、その出力をファイルに保存したいの.txtですが、やりたいことにはファイルが最適だと思いました。

以下に2つのコードがあります。

最初のものは機能しますが、pythonwinのインタラクティブウィンドウにデータを出力するだけです(私はwindows 7とpython 2.7を使用しています)。

それは私のプロジェクトにとって有用なデータであるようなものを出力します:

thrown out: bTUD, K2, MAG B, K1C, K1B, K1A, XTC64 II, REF , LBK, MAG C
1   1   : ['PINKwA', 'GB', 'PINK', 'TUwA'] [ 0.23994351  0.61419796  0.00956974  0.1362888 ] tet_i 66
1   2   : ['PINKwA', 'GB', 'PINK', 'TUwA'] [ 0.23816363  0.61917833  0.01219634  0.13046169] tet_i 66
1   3   : ['PINKwA', 'GB', 'PINK', 'TUwA'] [ 0.23638376  0.6241587   0.01482295  0.12463459] tet_i 66
1   4   : ['PINKwA', 'GB', 'PINK', 'TUwA'] [ 0.23460388  0.62913907  0.01744955  0.11880749] tet_i 66
1   5   : ['PINKwA', 'GB', 'PINK', 'TUwA'] [ 0.23282401  0.63411944  0.02007616  0.11298039] tet_i 66
...etc.

2番目のコードは、関数を使用しようとする私の試みですが、まったく機能outputoutput.writeません! Python の基本的な言語スキルが欠けているため、解決策が見つからないのだと思います。

1コード目(印字機能OK)

import tetgen, geometry
from pprint import pprint
import random, csv
import numpy as np
from pprint import pprint

all_colors = [(name, float(X), float(Y), float(Z))
              for name, X, Y, Z in csv.reader(open('colors.csv'))]

# background is marked SUPPORT
support_i = [i for i, color in enumerate(all_colors) if color[0] == 'SUPPORT']
if len(support_i)>0:
    support = np.array(all_colors[support_i[0]][1:])
    del all_colors[support_i[0]]
else:
    support = None

tg, hull_i = geometry.tetgen_of_hull([(X,Y,Z) for name, X, Y, Z in all_colors])
colors = [all_colors[i] for i in hull_i]

print ("thrown out: "
       + ", ".join(set(zip(*all_colors)[0]).difference(zip(*colors)[0])))

targets = [(name, float(X), float(Y), float(Z), float(BG))
           for name, X, Y, Z, BG in csv.reader(open('targets.csv'))]

for target in targets:
    name, X, Y, Z, BG = target

    target_point = support + (np.array([X,Y,Z]) - support)/(1-BG)

    tet_i, bcoords = geometry.containing_tet(tg, target_point)

    if tet_i == None:
        print "out"
        # not in gamut
    else:
        names = [colors[i][0] for i in tg.tets[tet_i]]
        print "%s:" % target[0], names, bcoords, "tet_i", tet_i

編集: 以下のコードは機能しますが、ファイル内の 1 行のデータのみをエクスポートします

for target in targets:
    name, X, Y, Z, BG = target

    target_point = support + (np.array([X,Y,Z]) - support)/(1-BG)

    tet_i, bcoords = geometry.containing_tet(tg, target_point)


if tet_i == None:
    output = open('output.txt','a')
    output.write(str(target[0]))    

else:
    output = open('output.txt','a')
    names = [colors[i][0] for i in tg.tets[tet_i]]
    output.write(str(target[0]))
    output.write(str(names))
    output.write(str(bcoords))

そのデータをファイルに書き込む方法を教えてください。

4

2 に答える 2