0
이 도우미 함수 (StackOverflow에서 찾은)를 사용하여 CSV 파일의 행을 읽지 만 특정 열만 유지하는 데 도움이됩니다. 원본 파일. Python : csv 파일의 특정 열을 읽으려고하면 Python : row_type() 오류가 발생합니다.
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
는 지금은이 기능을 사용하여 작성한 코드는 키를 사용하여, 두 개의 범주, x와 y의 questions.csv에 두 개의 파일, 키 파일과 응답 파일 및 등급 응답이 열립니다 answers.csv 파일에 있습니다.
는
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()
지금은 그냥 두 가지 범주로 구분하여 두 파일에서 추출 된 행을 인쇄하고있어 프로그램이 오면 나는 루프 마지막에이 오류가 발생합니다 :
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
I 돈 범위가 범위를 벗어난 이유는 for 루프가 이전 for 루프의 정확한 복사본이기 때문에 파일을 다시 열어 커서가 처음에 오도록했는지 이해할 수 없습니다.