2014-04-19 54 views
-1

我是python的新手,並且通過採取棘手的問題學到了很多東西。我需要社區幫助解決這個問題。我有一個包含以下數據的文本文件。Python:從文本文件創建一個映射(元組)

river,4 
-500, -360 
-500, 360 
500, 360 
500,-360 

sand, 3 
400, 300 
500, 300 
200, 100 

我的問題是,我需要借這個文件加載,並創建一個tuple,看起來像下面這樣:

block=("river",4,(-500, -360),(-500, 360),(500, 360),(500,-360)), ("sand", 3,(400,300), (500, 300), (200, 100)) 

這是到目前爲止我的代碼

file=open("file.txt", "r") 
lineString=file.readlines() 

請不要我無緣無故地冷落了我。我是新來的社區和學習python。

+0

對不起,這是一個錯字。我已經重新編輯了文件 – don

+0

,輸入數據中'river'後面的'4'怎麼樣?這種材料與否? – iruvar

+0

在這種情況下,我會說它的素材 – don

回答

0

這會給你想要的東西:

import csv 

output = [] 
block =() 
with open('input_file') as in_file: 
    csv_reader = csv.reader(in_file) 
    for row in csv_reader: 
     output.append(tuple(row)) 

first_element = output[0] 
a, b, c, d = output[1:] 
block = (first_element[0], a, b, c, d) 

打印

("river",(-500, -360),(-500, 360),(500, 360),(500,-360)) 

我必須說,你的組織數據的方式是沒有意義的我。上述代碼僅在river, 4行後有4行時有效。如果有更多的替換:

a, b, c, d = output[1:] 
block = (first_element[0], a, b, c, d) 

block = (first_element[0], output[1:]) 

但在這種情況下,輸出將是:

("river",[(-500, -360),(-500, 360),(500, 360),(500,-360)]) 
+0

在a,b,c,d = output上打開太多的值[1:] – don

+0

@drunkenmaster我的解決方案嚴格針對上面有4個值的示例。檢查我更新的答案,以瞭解原因 – shaktimaan