2013-12-18 150 views
3

我是新來的python,我想從csv導入一組x,y座標到python。從CSV導入座標 - Python

目前我的腳本看起來如下:

with open ('filename.csv') as csvfile: 
    data = list(tuple(rec) for rec in csv.reader(csvfile, delimiter= ",")) 

這爲我提供瞭如下(打印時)COORDS的列表:

[('1', '2'), ('5', '6'), ('4', '4'), ('8', '9')] 

不過,我需要的輸出如下看起來那麼它可以成功地傳遞到多邊形測試中的一個點。

[(1, 2), (5, 6), (4, 4), (8, 9)] 

任何人都可以推薦我如何改變我的腳本來實現上述結果嗎? (使用CSV模塊時,與單純只是一個open它可以更短)

[(int(x), int(y)) for x, y in l] 
+1

N.B:如果你正在使用Python 2,它應該是'開放( 'filename.csv', 'RB')'; Python 3,'open('filename.csv','r',newline ='')'。 – DSM

+0

此外,'csv.reader()'調用''delimiter =「,''是不必要的,因爲,這並不奇怪,這是CSV的默認值[[逗號分隔值](http:// en。 wikipedia.org/wiki/Comma-separated_values))。 – martineau

回答

2

許多方式來做到這一點,但我認爲這是最短:

+1

太棒了,我在最後加了一個方括號,並刪除了重複的'in',它完成了這項工作! – user3115802

+0

Oopsie ...當我寫這些時,我顯然沒有注意。很高興它對你有效 :) – Wolph

1

試試這個

with open('filename.csv') as csvfile: 
    data = [(int(x), int(y)) for x, y in csv.reader(csvfile, delimiter= ',')] 
2
import csv 

with open('coords.csv', 'rb') as csvfile: 
    data = [tuple(map(int, row)) for row in csv.reader(csvfile)] 

print data 

你可以這樣做,也是逐步使用生成功能,避免產生巨大的名單(除非那是你的目標):

def get_data(filename): 
    with open(filename, 'rb') as csvfile: 
     for x, y in csv.reader(csvfile): 
      yield int(x), int(y) 

print list(get_data('coords.csv')) 

無論哪種方式,這將是輸出:

[(1, 2), (5, 6), (4, 4), (8, 9)]