私が使用しているコード(Pythonではなく)は、特定の方法で記述された入力ファイルを受け取ります。私は通常、このような入力ファイルをPythonスクリプトで準備します。それらのうちの1つは、以下のフォーマットをとる。pythonのprint関数とnumpy.savetxt 3
ここで、100は全体的なパラメータであり、残りは行列である。 Python 2では、私は次のようにしていました。
# python 2.7
import numpy as np
Matrix = np.arange(9)
Matrix.shape = 3,3
f = open('input.inp', 'w')
print >> f, 100
np.savetxt(f, Matrix)
私はちょうど最近python 3に変換されました。 numpy.savetxt
の実行中にfh.write(asbytes(format % tuple(row) + newline))
のようなものがあるので、私が得た最初のエラーがTypeError: write() argument must be str, not bytes
た
# python 3.6
import numpy as np
Matrix = np.arange(9)
Matrix.shape = 3,3
f = open('input.inp', 'w')
print(100, file=f)
np.savetxt(f, Matrix)
:2to3はとスクリプト上で実行すると、私のようなものを取得します。ファイルをバイナリとして開くことでこの問題を解決できました:f = open('input.inp', 'wb')
しかし、これによりprint()
が失敗することになります。これら2つを調和させる方法はありますか?
現在のPythonバージョンで動作するようにNumpyビルドをお持ちですか? –
良い質問です。私はPythonパッケージを管理するためにAnacondaを使用しています。 Python 3に変換するとき、私はpython 3.6で新しい環境を作りました。そして、新しい環境に 'conda install numpy'のようなものをすべてインストールしました。これで十分ですか? – Fxyang
'savetxt'はファイルを 'wb'で開き、すべての文字列を' np.asbytes'に渡します。これはすべてのユニコード文字列で '.encode( 'latin1')'を行います。この考え方は、Py2スタイルの出力を維持することです。コードは読みやすいPythonです。 – hpaulj