2012-12-07 39 views
1

我有一個函數table(),它讀取一個csv文件並返回單個列表中的行。我想映射這些列表來創建一個字典,字段標題是鍵,底層的行是值。但我似乎無法做到這一點。當我嘗試僅在命令提示符下調用從函數(l)創建的列表的列表中的第一個元素時,它會將所有列表返回到'N',即單詞'None'中的第一個字母,儘管我如果閱讀器爲無,則打破(返回)。當我對sys.stdout執行與文本文件相同的操作時,它也會執行相同的操作,但'N'將替換爲<type 'list'>。有誰知道我做錯了什麼,以及如何從給定我的table()函數的CSV文件創建字典(或列的列表)?無法從Python函數返回列表元素

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'> 

回答

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 [] 
+0

優秀。謝謝你們倆。然而,當我嘗試創建表格中的列字典時,會出現最奇怪的事情。標題分配爲鍵,表格內容爲值,就像我期望的那樣。然而,標題匹配行(標題1匹配行1),而不是像我所期望的那樣匹配列。 – user1185790

+0

下列溶液幫助: 升=表() 鍵= 1 [0] 值= 1 [1:] 值=拉鍊(*值) 字典=字典(拉鍊(鍵,值)) 打印字典 – user1185790

3

更多pythonically

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

或在Python 3.3中,'來自reader的yield'。 – japreiss

+0

我希望他們能夠從''產出'回報'。我用'from __future__ import yield'聲明瞭。 – jdotjdot

+0

@jdotjdot這是一個可愛的功能。當我不在3.3時,我真的很想念它。 –