2

我想将二维矩阵写入 .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

使用泡菜模块:

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

一种选择是在读取矩阵时使用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'>

此外,如果速度真的很重要,请考虑使用cPickle而不是pickle.

希望有帮助。

于 2013-08-30T12:53:43.030 回答
0

在 Python 中(尤其是在科学环境中)处理数字矩阵的一种常用方法是NumPy数组。Numpy 提供了两种方法savetxt()loadtxt()来存储和加载这些数组。这些方法还允许自定义文本格式。

于 2013-08-30T14:00:59.720 回答