[英]Python: row_type() causes error when trying to read specific columns in csv file
我正在嘗試使用此幫助函數(在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
我不明白為什么給出了超出范圍的索引,因為for循環是前一個for循環的精確副本,並且我確保重新打開文件以使光標位於開頭。
我會檢查len(row)和len(mapping)並確保它們是相同的尺寸。 如果不是,您將看到索引錯誤。 只是一個想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.