从 .csv 文件中提取列并找到它们的索引

5

我有一个很大的csv文件,我想获取存储在特定列中的所有值,我知道列的名称。

不知怎么搞,但我觉得我已经接近成功了 :(

import codecs
import csv
import json
import pprint
import re


FIELDS = ["name", "timeZone_label", "utcOffset", "homepage","governmentType_label", "isPartOf_label", "areaCode", "populationTotal", 
      "elevation", "maximumElevation", "minimumElevation", "populationDensity", "wgs84_pos#lat", "wgs84_pos#long", 
      "areaLand", "areaMetro", "areaUrban"]

index=[]

with open('/Users/stephan/Desktop/cities.csv', "r") as f:
    mycsv=csv.reader(f)
    results=[]
    headers=None
    for row in mycsv:
        for i, col in enumerate(row):
            if col in FIELDS:
                index.append(i)
        print row[i]    
print index             

我认为我的列表索引是正确的,并给出了正确的值(列索引)

我需要在我的代码中添加什么才能使它工作?

2个回答

4
import csv

with open('/Users/stephan/Desktop/cities.csv', "r") as f:
    mycsv = csv.DictReader(f)
    for row in mycsv:
        for col in FIELDS:
            try:
                print(row[col])
            except KeyError:
                pass

对不起,我是编程新手,请问可以解释一下这个结构吗,“try:”然后是KeyError? - Frank White
row[col] - row 是一个字典,col 是字典中的一个键。如果 col 不在 FIELDS 中,则 row[col] 会引发 KeyError。语句 except KeyError: pass 可以避免引发此错误。 - mmachine
始终会在 KeyError 部分给我一个缩进错误 :( - Frank White
尝试在try/except语句中使用四个空格。 - mmachine
我按照 http://pastebin.com/yf33UTF0 中提出的方法尝试了一遍... 有人能告诉我我做错了什么吗 :( - Frank White
看起来你使用制表符来排列语句,最好使用四个空格。在“for row in mycsv:”这一行之后,你使用了两次制表符,应该只用一次。try必须恰好位于except上方。 - mmachine

0
如果您想要打印出 FIELDS 中所有列的值,您需要做的是:
for row in mycsv:
    for i, col in enumerate(row):
        # If this is the header row entry for one of the columns we want, save its index value
        if col in FIELDS:
            index.append(i)
        # If this is one of the columns in FIELDS, print its value
        elif i in index:
            print col   

我在使用Python 2.7时遇到了“elif”无效语法的问题,该怎么办? - Frank White
发布你的整个代码,我会告诉你哪里出了问题。 - Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接