2015-11-08 26 views
2

我有一個包含座標的文本文件,我想放入一個基於python的圖形中(圖形來自kivy.garden.graph模塊,我正在使用該模塊) 。 。將文本文檔座標'x,y'轉換爲浮點列表對象

的文本文件,當我使用open()閱讀(),看起來是這樣的:

(0, 1.836957) 
(1, 1.836995) 
(2, 1.837073) 
(3, 1.837111) 
(4, 1.837111) 

而且是字符串類型。我需要它去到圖形模塊:

[(0, 1.836957), (1, 1.836995), (2, 1.837073), (3, 1.837111), (4, 1.837111)] 

注意,文本文件會實時更新,其圖形模塊可以處理。或者充其量,挑選最後創建的10個x,y點。另外,我可以操作文本文件,因爲我已經從外部的另一個函數中自己輸出它。

道歉爲簡單起見,但我一直在抓我的頭轉過來,現在過去24小時。我只設法得到這樣的:

(末尾的逗號後空格)

[(0, 1.836957), (1, 1.836995), (2, 1.837073), (3, 1.837111), (4, 1.837111), ] 

注意額外的逗號和空間,並且只使用替代(),而非是通過字符串操作我需要的是浮動類型。

回答

0

使用stripsplit方法來打破每行放入適當的座標。

with open("myfile.txt") as fh: 
    coords = [] 
    for line in fh: 
     line = line.strip('()\n') # Get rid of the newline and parentheses 
     line = line.split(', ') # Split into two parts 
     c = tuple(float(x) for x in line) # Make the tuple 
     coords.append(c) 

整個事情可以用列表理解更有效地完成;以上更具可讀性。

with open("myfile.txt") as fh: 
    coords = [tuple(float(x) for x in line.strip('()\n').split(', ')) for line in fh] 
+0

第一個解決方案有效,但第二個解決方案在每個座標周圍都有撇號。我非常非常高興,非常感謝你chepner! –

+0

哦,我忘了將'float'映射到每個值。 – chepner

0

在我的經驗,這將是比較容易,如果對數據進行保存,就像: NUMBER1 \ t NUMBER2 \ n 不管怎樣,一個選項做你想做的是什麼:

import json # This library has lost os ways to load and save data 
f=open('file.txt','r') 
# Remove the \n at the end of each line and replace() for [] 
# Create the data with all the tuples. 
# json only reads list, thats why we have to transforn it into a tuple at the end 
data=[tuple(json.loads(l[:-1].replace('(','[').replace(')',']'))) for l in f] 
f.close() 

這應該工作。如果如果更新了文件,我認爲你應該再次打開它,在它的工作

1

根據所提供的輸入和你正在努力實現的輸出,你可以利用的literal_evalast

此外,對於這種特殊情況,如果您使用readlines()而不是read(),則可能更容易管理數據。 readlines會給你一個清單。

看看這個:

import ast 
x = list(ast.literal_eval(','.join(i.strip() for i in open('some_file').readlines()))) 

輸入:

(0, 1.836957) 
(1, 1.836995) 
(2, 1.837073) 
(3, 1.837111) 
(4, 1.837111) 

輸出:(類型將是一個列表)

[(0, 1.836957), (1, 1.836995), (2, 1.837073), (3, 1.837111), (4, 1.837111)] 
相關問題