如何在Python中将数组保存到文本文件?

17

我有一个这样类型的数组:

xyz = [['nameserver','panel'], ['nameserver','panel']]

我该如何以这种格式保存到abc.txt文件中:

nameserver panel
nameserver panel

我尝试使用这个方法,在迭代每一行时:

np.savetxt("some_i.txt",xyz[i],delimiter=',');

它显示这个错误:

TypeError: Mismatch between array dtype ('<U11') and format specifier 
('%.18e')

你的原始列表包含 nameservers,但保存的文件名为 nameserver(末尾没有 s)。 - lenik
你能遍历你的列表并将其打印到屏幕上吗?(只是想弄清楚你遇到了什么问题) - doctorlove
NumPy的savetxt方法有一个默认格式说明符:fmt ='%.18e',用于保存浮点数而不是字符串。因此出现了错误。 - doctorlove
5个回答

36

这是一个可能的解决方案:

data = [['nameservers','panel'], ['nameservers','panel']]

with open("output.txt", "w") as txt_file:
    for line in data:
        txt_file.write(" ".join(line) + "\n") # works with any number of elements in a line

12

可能最简单的方法是使用json模块,将数组一步转换为列表:

使用json模块,将数组转换为列表最简单。

import json

with open('output.txt', 'w') as filehandle:
    json.dump(array.toList(), filehandle)

使用JSON格式可以实现不同系统之间的互操作性。


2
优美的方法。 - erfelipe
1
对于我的数组变量,"toList"方法抛出了以下异常:*** AttributeError: 'list'对象没有'toList'属性。 - Gilles Pion
这应该是第一个答案..之前的答案太hacky了,而且在重新创建文件时需要进行大量代码检查来读取文件。 - Vikram Murthy

7
使用 csv.writer
import csv

data = [['nameservers','panel'], ['nameservers','panel']]

with open('tmp_file.txt', 'w') as f:
    csv.writer(f, delimiter=' ').writerows(data)

tmp_file.txt现在应该是这样的:

nameservers panel
nameservers panel

4

以下是其中一种可能:

stuff = [['nameservers','panel'], ['nameservers','panel']]
with open("/tmp/out.txt", "w") as o:
    for line in stuff:
        print("{} {}".format(line[0], line[1]), file=o)

2
您可以直接将其写入文件中。
with open('outfile.txt', 'w') as f:
    f.write('\n'.join([' '.join(l2) for l2 in l1]))

其中l1是您提供的列表。


2
不要在变量名中使用“l”。 - lenik
4
容易使事物难以阅读,特别是当与1l1ll11l1l111l1l1ll混合在一起时--你能读懂这个吗? - lenik
5
所以我不能把我的变量命名为“location”或“letter”吗?你不应该使用“l”作为单个字符变量名称,在这方面没有其他限制(PEP-8)。 - Psytho
4
"12"不是一个变量名... @lenik ;) 不能使用join函数连接。 - modesitt

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