2013-04-22 88 views
2

目前,我有一个列表直接在我的代码中,并使用枚举,因此我可以使用列表索引号为用户选择其中一个项目。看起来像(包括刚刚标题行)这个阅读csv,然后列举

fmpList = [['Date', 'ID', 'Plot No', 'Modified', 'Lat', 'Long']...... 
for item in enumerate(fmpList[]):    
    print "[%d] %s" % item 

这种运作良好,但我不希望把功能列表,而是从文件中读取的CSV。我以前做的,这是另一种选择......

​​

这也适用,但我似乎无法在2相结合...读取csv文件,然后枚举能有基于选择在索引上。 帮助将不胜感激

编辑: 因为我想现在我已经得到了工作代码...

​​

但最后一行是不是给我列2只显示。实际上,我在第0列(索引号)和第2列(图名)之后。 [0]给出第一列...很酷,但是任何大于1的数字都会给出IndexError:..out范围。想尽组合,但没有工作

+3

'因为我,行枚举(plotlist)'? – sapi 2013-04-22 04:43:55

+0

请参阅http://stackoverflow.com/questions/6410982/enumerate-items-in-a-list-so-a-user-can-select-the-numeric-value – gimel 2013-04-22 04:54:10

+0

您的CSV格式如何。分隔符可能只是一个字符,现在你有选项卡和空间 – jamylak 2013-04-22 04:54:52

回答

4

enumerate(...)适用于任何可迭代

import csv 
with open ('fmpList.csv', 'rU') as csvfile: 
    next(csvfile, None) # skip header 
    plotlist = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab) 
    for i, row in enumerate(plotlist): 
     print "[%d] %s" % (i, row) 
+3

+1这就是我会做的。 – 2013-04-22 05:08:45

+0

这样的效果很好,但我也在排列(plotlist [1:]):为了摆脱标题行,但现在我得到了TypeError。我该怎么做呢? – 2013-04-22 05:27:35

+0

@ Op.Ivy您不能使用列表切片语法切片文件,我刚刚添加了对'next'的调用,以将文件迭代器前移一个项目以跳过标题 – jamylak 2013-04-22 05:28:52