我正在尝试为文本文件编写3D矩阵/数组,事实证明它相当困难。我已经尝试过file.write(str(matrix))
并且可以正确地编写它,但是它并没有说明我后来提取数据所需的方式。
我有什么;
[[1, 2, 3,][4, 5, 6][7, 8, 9]]
我希望文件包含什么;
1 2 3
4 5 6
7 8 9
我正在读取这样的文件,并且我希望它也易于阅读。
with open("matrix.txt") as textFile:
matrix = [line.split() for line in textFile]
任何想法?
您可以将矩阵的各个行转换为由空格分隔的字符串,并将其写入文本文件。
matrix = [[1, 2, 3,],[4, 5, 6],[7, 8, 9]]
with open('matrix.txt', 'w') as testfile:
for row in matrix:
testfile.write(' '.join([str(a) for a in row]) + '\n')
[如果只需要写入数据并以后可以从Python程序中检索数据,那么压缩的“文本”文件只会使事情变得复杂。
这是因为Python附带了pickle
模块,该模块可以序列化有意义的可序列化对象,并随后以无缝方式从文件中检索它们。
在这种情况下,如果您的“矩阵”位于具有该名称的变量上,则您需要的所有代码是:
import pickle
pickle.dump(matrix, open("myfile.bin", "wb"))
并在以后检索:
import pickle
matrix = pickle.load(open("myfile.bin", "rb"))
现在,如果您需要文本和人类可读的文本,那么矩阵就是列表中包含数字元素且没有任意对象的列表,json
模块将完全相同,并生成一个文件,该文件不仅易于阅读,而且可以在许多其他语言和库下理解:
import json
json.dump(matrix, open("myfile.bin", "wb"))
# retrieve:
matrix = json.load(open("myfile.bin", "rb"))
推出您自己的代码 [续]
您可以使用numpy.savetxt:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.savetxt(filename, a)