Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:row_type()在尝试读取csv文件中的特定列时导致错误_Python_Sql_Csv - Fatal编程技术网

Python:row_type()在尝试读取csv文件中的特定列时导致错误

Python:row_type()在尝试读取csv文件中的特定列时导致错误,python,sql,csv,Python,Sql,Csv,我试图使用这个helper函数(我在StackOverflow上找到的)来帮助我读取csv文件的行,但只保留原始文件中的某些列 def read_csv(file, columns, type_name="Row"): try: row_type = namedtuple(type_name, columns) except ValueError: row_type = tuple rows = iter(csv.reader(file))

我试图使用这个helper函数(我在StackOverflow上找到的)来帮助我读取csv文件的行,但只保留原始文件中的某些列

def read_csv(file, columns, type_name="Row"):
    try:
        row_type = namedtuple(type_name, columns)
    except ValueError:
        row_type = tuple
    rows = iter(csv.reader(file))
    header = rows.next()
    mapping = [header.index(x) for x in columns]
    for row in rows:
        row = row_type(*[row[i] for i in mapping])
        yield row
现在,我使用这个函数编写的代码打开了两个文件,一个密钥文件和一个响应文件,并使用文件answers.csv中的密钥将questions.csv中的响应分为两个单独的类别x和y

x = ["q1","q4","q5","q7","q9"]
y = ["q2","q3","q6","q8","q10"]

key = open('answers.csv','rU')
for row in read_csv(key, x):
   x_answers = row
   print x_answers
key.close()

key = open('answers.csv','rU')
for row in read_csv(key, y):
    y_answers = row
    print y_answers
key.close()

responses = open('questions.csv', 'rU')
for row in read_csv(responses, x):
    print row
responses.close()

responses = open('questions.csv', 'rU')
for row in read_csv(responses, y):
    print row
responses.close()
现在,我只是打印从两个文件中提取的行,这些文件分为两个类别,当程序进入最后一个For循环时,我会出现以下错误:

execfile("read_csv.py")
Row(q1='b', q4='c', q5='c', q7='b', q9='d')
Row(q2='d', q3='c', q6='b', q8='b', q10='b')
Row(q1='b', q4='c', q5='c', q7='c', q9='d')
Row(q1='b', q4='c', q5='c', q7='b', q9='d')
Row(q1='b', q4='c', q5='c', q7='b', q9='d')
Row(q1='b', q4='c', q5='c', q7='b', q9='d')
Row(q1='b', q4='c', q5='c', q7='b', q9='d')
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "read_csv.py", line 52, in <module>
        for row in read_csv(responses, US):
    File "read_csv.py", line 20, in read_csv
        row = row_type(*[row[i] for i in mapping])
    IndexError: list index out of range
execfile(“read_csv.py”)
行(q1='b',q4='c',q5='c',q7='b',q9='d')
世界其他地区(q2='d',q3='c',q6='b',q8='b',q10='b')
行(q1='b',q4='c',q5='c',q7='c',q9='d')
行(q1='b',q4='c',q5='c',q7='b',q9='d')
行(q1='b',q4='c',q5='c',q7='b',q9='d')
行(q1='b',q4='c',q5='c',q7='b',q9='d')
行(q1='b',q4='c',q5='c',q7='b',q9='d')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“read_csv.py”,第52行,在
对于read_csv(响应,美国)中的行:
文件“read_csv.py”,第20行,在read_csv中
行=行类型(*[行[i]表示映射中的i])
索引器:列表索引超出范围
我不明白为什么索引超出范围,因为for循环是前一个for循环的精确副本,我确保重新打开文件,以便光标位于开始处

我会检查len(行)和len(映射)并确保它们是相同的维度。如果没有,您将看到一个索引错误。只是一个想法