簡體   English   中英

Python:嘗試讀取csv文件中的特定列時,row_type()導致錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM