2015-01-10 70 views
-4

我有一個文本文件名爲listCls.txt的元組(每行一個)。他們看起來像這樣從文本文件導入元組到列表中

(10.0, 0.0, 0.0) 

(9.297883, 3.680947, 0.0) 

(7.071068, 7.071068, 0.0) 

我想將這個文本文件作爲列表導入到我的python腳本中,如下所示。

list = [(10.00 , 0.00 , 0.00),(9.30,3.68 , 0.00) , (7.07, 7.07, 0.00)] 

我也想把它們四捨五入到兩位數的地方。謝謝

+0

這些數字根本不匹配。最後兩個元組看起來像重新排列但略有不同。絕對不是你的輸出相同。最新情況 – jamylak

+0

@jamylak。是的,我糾正了它。我是一個抄襲錯誤。謝謝你指出。 – zee

+0

我還是不明白你是怎麼回到'9.28' – jamylak

回答

1

不會爲你解決,因爲你沒有嘗試任何東西。

指南

  1. 打開文件(open('file.txt', r))和
  2. 對於每一個你讀行:
    1. 刪除括號
    2. 分裂用逗號
    3. 修剪件(提示: .strip()
    4. 將它們轉換爲數字
    5. 做你的四捨五入
    6. 撰寫的元組這些數字
+0

謝謝。我剛剛在2周前開始學習python。這非常迷人。以前我使用循環將元組導入到列表中。當我嘗試打印第一個元素的第一個元素,例如元素[1] [0],它應該給我X座標時,它只會給我第一個座標值。它以某種方式將元組導入爲字符串而不是數字。 – zee

+0

如果您將代碼添加到問題中,某人(也許是我)可以幫助解決問題。我真的不知道你在做什麼錯誤。 – MightyPork

1

我敢肯定,有一種方法與現有的蟈蟈組件要做到這一點,但我覺得它有一個去只是查看。

該位產生一些符合你的數據:

import random 

f = open('listCls.txt','w') 
for i in range(100): 
    a = random.uniform(0, 10) 
    b = random.uniform(0, 10) 
    c = random.uniform(0, 10) 
    f.write('({}, {}, {})\n\n'.format(a,b,c)) 
f.close() 

那麼該位讀它:

f = open('listCls.txt','r') 

list =[] 

for line in f: 
    if line[0]=="(": 
     tup = eval(line) 
     list.append(tup) 

print list 

我敢肯定,有人會說,使用eval是邪惡的,但如果你已經生成了這些數據,並且您在中間某個地方的startGlobalWar()調用中沒有下滑,這幾乎就是eval所做的。

如果你不信任數據源(如果你沒有創建它,那麼你可能不應該)然後製作一個字符串discombobulator,如MightyPork建議的那樣。

我已經捨棄了四捨五入的部分。四捨五入是爲了人類。如果數據有小數位,請堅持使用,直到您絕對需要。否則,你只會得到累積性的不確定性,如果你需要把它帶入現實世界,那麼它就是第一次和第一次一起工作,並且不得不整夜打磨以使它們合適。