3254
2018-12-29 18:22:08
1
파일이 탭으로 구분되어 있었군요. 진지한수다님이 작성한 코드는 공백으로 구분되어 있는 것을 가정한 것입니다. 만일 공백으로 구분되어 있었다면...
>>> with open('list.txt') as f:
... for line in f:
... splited = [x for x in line.strip().split(' ') if len(x)>0]
... print (splited)
...
['이름', '국어', '수학', '영어', '체육']
['김영희', '70', '90', '54', '87']
['박철수', '50', '65', '87', '98']
['홍길동', '40', '75', '47', '85']
라는 결과를 내었을 것입니다. 사실은 탭으로 구분되어 있는 것이 더 쉬워요. CSV 모듈을 쓰면 되거든요. "cvs 모듈을 import 해서 각각의 라인을 리스트로 변환할 수 있을 것 입니다"라고 말한 것은 탭으로 구분되었을 경우를 가정한 것이니까요 :) 자... 이렇게 바꿔보세요.
>>> import csv
>>> with open('list.txt') as f:
... for line in csv.reader (f, delimiter='t'):
... print (line)
...
['이름', '국어', '수학', '영어', '체육']
['김영희', '70', '90', '54', '87']
['박철수', '50', '65', '87', '98']
['홍길동', '40', '75', '47', '85']
이게 된다면... 진지한수다님의 splited 부분을 line 으로 바꾸면 될 거에요. 이렇게 자료를 가공하는 것을 파싱이라고 하고요. 또는...
>>> 성적표 = {}
>>> with open('list.txt') as f:
... for line in csv.reader (f, delimiter='t'):
... 성적표[line[0]] = line[1:]
...
>>> print (성적표)
{'이름': ['국어', '수학', '영어', '체육'], '김영희': ['70', '90', '54', '87'], '박철수': ['50', '65', '87', '98'], '홍길동': ['40', '75', '47', '85']}
>>> del 성적표['이름']
>>> print (성적표)
{'김영희': ['70', '90', '54', '87'], '박철수': ['50', '65', '87', '98'], '홍길동': ['40', '75', '47', '85']}
>>> for 이름, 성적 in 성적표.items():
... 성적표[이름] = [ int(성적[0]), int(성적[1]), int(성적[2]), int(성적[3]) ]
...
>>> print (성적표)
{'김영희': [70, 90, 54, 87], '박철수': [50, 65, 87, 98], '홍길동': [40, 75, 47, 85]}
>>>
처럼 해서 성적표 딕셔너리를 만드세요. 중간 중간 넣은 print 문은 확인을 위한 것이니까 나중에 생략해도 되고요. 이걸 람다와 맵으로 포장해도 되지만 일부러 하나 하나 썼습니다. 이렇게 성적표 딕셔너리가 만들어지면... 처음에 제가 말씀드린 방법을 써보세요.