我想将一个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将成为一个字符串。我希望它是一个整数矩阵,就像原始矩阵垫一样。
答案 0 :(得分: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
答案 1 :(得分:1)
一种选择是在阅读矩阵时使用literal_eval():
安全地评估表达式节点或包含Python的字符串 表达。提供的字符串或节点可能只包含 以下Python文字结构:字符串,数字,元组,列表, dicts,booleans和None。
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'>
此外,如果速度非常重要,请考虑使用cPickle代替pickle
。
希望有所帮助。
答案 2 :(得分:0)