私はプログラミングの完全な初心者であり、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番目のコードは、関数を使用しようとする私の試みですが、まったく機能output
しoutput.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))
そのデータをファイルに書き込む方法を教えてください。