从.txt文件写入和读回

时间:2013-08-30 12:51:34

标签: python matrix

我想将一个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将成为一个字符串。我希望它是一个整数矩阵,就像原始矩阵垫一样。

3 个答案:

答案 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)

在Python中使用数字矩阵(特别是在科学上下文中)的常用方法是NumPy数组。 Numpy提供了两种方法savetxt()loadtxt()来存储和加载这些数组。这些方法还允许自定义文本格式。