2

2D マトリックスを .txt ファイルに書き込み、このマトリックスを .txt ファイルから読み返したいと考えています。書くために、私はこれをやっています:

mat = [[1, 2], [3, 4]]
fout = open("file.txt", "w")
fout.write(str(mat))
fout.close()

これは正常に機能しており、マトリックスを .txt ファイルに保存しています。後でこのマトリックスを読み戻そうとすると、うまくいかず、次のコードはコンソールに何も出力しません。

mat1 = open("file.txt", "r")
for line in mat1:
    print line

最初の質問ですが、ファイルを読む際にどのような間違いを犯していますか? 次に、読み取りが正常に機能し始めた後、mat1 は文字列になります。元の行列マットと同じように整数行列にしたい。

4

3 に答える 3

2

pickle モジュールの使用:

import pickle
new_list = [[1, 2],[3,4]]
fout = open("file.txt", "wb")
pickle.dump(new_list,fout)
fout.close()

mat1 = open("file.txt", "r")
old_list = pickle.load(mat1)
print old_list[1] #example
于 2013-08-30T12:56:07.680 に答える
1

1 つのオプションは、行列を読み戻すときにliteral_eval()を使用することです。

式ノードまたは Python 式を含む文字列を安全に評価します。提供される文字列またはノードは、次の Python リテラル構造のみで構成されている可能性があります: 文字列、数値、タプル、リスト、辞書、ブール値、およびなし。

from ast import literal_eval

mat = [[1, 2], [3, 4]]
with open("file.txt", "w") as f:
    f.write(str(mat))


with open("file.txt", "r") as f:
    mat1 = literal_eval(f.read())

print mat1  # prints [[1, 2], [3, 4]]
print type(mat1)  # prints <type 'list'>

別のオプションはpickleを使用することです:

import pickle

mat = [[1, 2], [3, 4]]
with open("file.txt", "w") as f:
    pickle.dump(mat, f)

with open("file.txt", "r") as f:
    mat1 = pickle.load(f)

print mat1  # prints [[1, 2], [3, 4]]
print type(mat1)  # prints <type 'list'>

また、速度が本当に重要な場合は、代わりにcPicklepickleを使用することを検討してください。

それが役立つことを願っています。

于 2013-08-30T12:53:43.030 に答える