쓰기

2014-10-10 6 views
0

내가 단지 "등급"열을 선택하고 새에 해당하는 성적 등급을 작성하는 행을 갈 것 어떻게 데이터쓰기

'Student ID', 'Grade', 'Weight' 
'111112',  '76',  '24' 
'111112',  '66',  '14' 
'222223',  '46',  '14' 
'333334',  '96',  '18' 
'444445',  '56',  '17' 

의 집합을 감안할 때 "Letter Grade"란? 지금까지 내가 한 것은 새로운 컬럼을 만드는 것이지만, "Grade"컬럼에서 계산 된 데이터로 채우는 방법을 모르겠습니다. 먼저

with open(args.source, 'rb') as source_file: 
    with open(args.output, 'wb') as output_file: 
     reader = csv.reader(source_file, delimiter = '\t') 
     writer = csv.writer(output_file, lineterminator = '\n') 
     headers = next(reader, None) 

     if headers: 
      writer.writerow(headers + ['Letter Grade']) 

    print('Done.') 

답변

0
def get_letter_grade(score): 
    # define your own rules here 

    if score<50: 
     return "F" 
    if score <60: 
     return "D" 
    if score<70: 
     return "C" 
    if score<80: 
     return "B" 
    return "A" 

with open(args.source, 'r') as source_file, open(args.output, 'w') as output_file: 
    writer = csv.writer(output_file, lineterminator='\n') 
    reader = csv.reader(soure_file, delimiter=',') 
    headers = next(reader) 
    headers.append('Letter Grade') 

    for row in reader: 
     row = [i.strip().replace("'", '') for i in row] 
     grade = int(row[1]) 
     letter_grade = get_letter_grade(grade) 
     writer.writerow(row + [letter_grade]) 
+0

비교를 위해 사전이나지도를 사용하여이를 수행 할 수 있습니까? 또는 개별 if 문만이 유일한 방법입니까? – Catalog

+0

사전 이해는 효과가 있지만 더 지루할 것입니다. 추가 기능은 즉시 생각할 수있는 가장 파이썬적인 방법입니다. – inspectorG4dget

0

, 당신은 Grade 밖으로 Letter Grade을 만들기위한 규칙을 정의해야합니다. 그런 다음 해당 규칙을 코드로 바꿀 수 있습니다. 실제 규칙, 당신은 장소에 작성하는 방법을 알아낼 수있을 것입니다 무엇이든

for student_id, grade, weight in reader: 
    numeric_grade = int(grade) 
    letter_grade = 'P' if numeric_grade >= 60 else 'F' 
    writer.writerow((student_id, grade, weight, letter_grade)) 

: 나는 다른 어떤 등급> = 60 P, 아무것도 F을 만드는 간단한 하나를 사용합니다 내 하나의 라이너.

기존 코드 for row in reader:를 사용하여, 다른 방법 - 예를 들면의 행을 반복하고 - 그것은 다시 당신이 무슨 일을하는지에 맞게 내 한 줄에 적응하는 방법을 분명해야 row[0]row[1]에 의존하는 경우 (그리고 row + [letter_grade] 등으로 작성).