2013-12-16 71 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)