2013-12-16 34 views
2

当我写入文件我的结果:如何写不圆括号文件中的蟒蛇

output=knew[i][0],knew[i][1], knew[i][2],eigenval[k],group[i] 
value=str(output) 
o.write(value+'\n') 

我得到:

(0.05, 0.05, 0.166667, -0.8513056, 0.9881956035137526) 
(0.05, 1.05, 0.166667, -0.8513056, 0.011652226336523394) 
(0.05, -0.9500000000000002, 0.166667, -0.8513056, 0.00015217014972403685) 

如何写入文件,以便它不添加括号?

回答

7

而不是

value = str(output) 

你可以做

value = ', '.join(map(str, output)) 

你看到的是一个元组的字符串表示。它在那里,因为你在它上面调用str

什么str.join方法确实是加入一个迭代(例如,一个元组或列表)的字符串,使用字符串,它的呼吁作为分隔符(这里', '是分隔符和map(str, output)是一个字符串的迭代。)成一个字符串。 map将函数应用于迭代器的每个元素。在这种情况下,str应用于每个元素output,以便我们有一个可迭代的字符串,而不是浮点数。

可选地(有点哈克)可以只从您具有值剥去括号:

value = str(output)[1:-1] 
+0

我推断OP是相当新的Python的,因此,你不妨解释为什么你做'地图(STR,输出)'还什么'” ,'。加入'。 –

+0

谢谢。地图(str,输出)我发现也保持我的0.95而不是0.950000000002。做了一些关于连接和地图的阅读,知道很多功能。 –

+2

@AntonB:这可能是因为'str'和'repr'之间的区别,你应该仔细阅读。计算机无法准确存储大多数浮点小数(因为它们存储浮点_binary_数字)。在早期版本的Python中,'repr'尝试显示尽可能多的数字。最近的(repr)版本(都是2.x和3.x)尝试显示实际二进制数字的最小十进制数,所以你不会经常看到这一点。 – abarnert

2
value = "{0}, {1}, {2}, {3}, {4}".format(knew[i][0],knew[i][1], knew[i][2],eigenval[k],group[i]) 
o.write(value) 

使用格式STR对象功能是一个较好的方法。而且更高效。

+1

您可以将其缩短为'value =“{0 [0]},{0 [1]},{0 [2]} ,{1},{2}“.format(知道[i],eigenval [k],group [i])',因为前三个字段使用相同的元组。 – chepner

3

您还可以使用csv模块:

import csv 

with open('file.txt', 'wb') as f: 
    writer = csv.writer(f, delimiter=',') 
    output = knew[i][0], knew[i][1], knew[i][2], eigenval[k], group[i] 
    writer.writerow(output)