无法从Python函数返回列表元素

时间:2012-12-07 15:21:57

标签: python csv dictionary

我有一个函数table(),它读取csv文件并返回各个列表中的行。我想映射这些列表来创建一个字典,字段标题是键,底层行是值。但是我似乎无法做到这一点。当我尝试在命令提示符中仅调用我从函数(l)创建的列表列表中的第一个元素时,它会返回所有列表,直到'N',这是单词'None'中的第一个字母',尽管我打破(返回),如果读者是无。当我使用sys.stdout对文本文件执行相同操作时,它会执行相同操作,但“N”将替换为<type 'list'>。有谁知道我做错了什么,以及我如何在给定table()函数的CSV文件中创建字典(或列的列表)?

import csv

def table():
    with open('C:\\Python27\\test.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
            print row
        if reader is None:
            return

l = list(str(table()))
keys = l[0]
print keys

输出文本文件:

['Field1', 'Field2', 'Field3', 'Field4']
['a', '1', 'I', 'access']
['b', '2', 'II', 'accessing\n']
['c', '3', 'III', 'accommodation']
['d', '4', 'IIII', 'basically']
<type 'list'>

2 个答案:

答案 0 :(得分:3)

更诡异

def table():
    with open('C:\\Python27\\test.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
            yield row

答案 1 :(得分:1)

您实际上并未从table函数返回任何内容。试试这样:

def table():
    with open('C:\\Python27\\test.csv', 'rb') as f:
        lines = []
        reader = csv.reader(f)
        if reader:
            for row in reader:
                lines.append(row)
            return lines
        else:
            return []