如何在Python中将浮点数列表写入文件?

11

我需要从Python中将一系列矩阵写入纯文本文件。我的所有矩阵都是浮点格式,因此简单的file.write()和file.writelines()方法无法生效。

是否有一种转换方法可以让我不必遍历所有列表(在我的情况下,矩阵是一个列表的列表),并转换每个值?

我想我应该澄清一下,它不必看起来像矩阵,只需要以易于解析的列表形式呈现相关值,因为我将在稍后进行读取。所有内容放在一行上可能会更容易!


你能解释一下吗?为什么file.write()对你不起作用? - JPCosta
5个回答

16
m = [[1.1, 2.1, 3.1], [4.1, 5.1, 6.1], [7.1, 8.1, 9.1]]
file.write(str(m))

如果您想更控制每个值的格式:

def format(value):
    return "%.3f" % value

formatted = [[format(v) for v in r] for r in m]
file.write(str(formatted))

str(m) 产生了不同的东西。 - SilentGhost
哦,你写了另一种解决方案。是的,根据输出格式的不同(逗号分隔等),可能需要手动构建字符串。 - John Millikin
我认为矩阵的表示并不是OP所要求的。 - SilentGhost
实际上,我喜欢看到(并点赞)你们两个的解决方案。我承认我最初也像SilentGhost一样解释了这个问题,但在阅读了John的解决方案后,我不得不说这个问题留下了确切的输出格式推断。 - Jarret Hardie
我想我应该澄清一下,它不需要看起来像一个矩阵,只需要将相关值放在一个易于解析的列表中,因为我之后会进行读取。把所有内容都放在一行上可能会更容易,但还是感谢大家的思考! - Fry

11

以下方法适用于我:

with open(fname, 'w') as f:
    f.writelines(','.join(str(j) for j in i) + '\n' for i in matrix)

5

为什么不使用pickle呢?

import cPickle as pickle
pckl_file = file("test.pckl", "w")
pickle.dump([1,2,3], pckl_file)
pckl_file.close()

https://intoli.com/blog/dangerous-pickles/ - Frederick Ollinger

2

对于矩阵中的每一行:

file.write(" ".join(map(str,row))+"\n")

这对我来说是有效的...并以矩阵格式编写输出。


1
import pickle

# write object to file
a = ['hello', 'world']
pickle.dump(a, open('delme.txt', 'wb'))

# read object from file
b = pickle.load(open('delme.txt', 'rb'))
print b        # ['hello', 'world']

在这一点上,您可以使用vi查看文件'delme.txt'
vi delme.txt
  1 (lp0
  2 S'hello'
  3 p1
  4 aS'world'
  5 p2
  6 a.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接