텍스트 파일을 읽어와서 내림차순 혹은 오름차순으로 정리하고 다시 파일로 출력

조회수 2084회

9 김철수 72

10 박재용 79

1 나영희 34

3 이나연 46

이런식으로 되어있는 텍스트파일(학번, 이름, 성적)을 읽어와서 학번을 기준으로 내림차순이나 오름차순으로 정리한다음에 다시 파일로 출력 해야하는데욥 어떻게 해야할까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 해당 파일이 엄격한 형식을 따르는 flat 파일이아니라, 느슨한 형식의 파일이라면 정규표현식을 써야할겁니다... 다행히도, ' '문자와, '\n'줄 바꿈 문자로 구분이 되는 '학번','이름','성적'\n 의 파일이네요...

    #text.txt
    9 김철수 72
    10 박재용 79
    1 나영희 34
    3 이나연 46
    
    
    filename = 'text.txt'
    f = open(filename,'r', encoding='utf-8')
    counter = 0
    subCounter = 0
    studentNumber = ''
    studentName = ''
    studentGrade = ''
    studentList = []
    
    while(True):
        try:
            temp = f.readline()
            if temp == '':
                raise
            for i in temp:
                if i == ' ' and subCounter == 0:
                    studentNumber = temp[:counter]
                    temp = temp[counter+1:]
                    counter = 0
                    subCounter += 1
                    continue
                if i == ' ' and subCounter == 1:
                    if temp[-1] == '\n':
                        temp = temp[:-1]
                    studentName = temp[:counter]
                    studentGrade = temp[counter+1:]
                    temp = ''
                    counter = 0
                    subCounter = 0
                    studentList.append([studentNumber,studentName,studentGrade])
                    break
                counter+=1
        except:
            f.close()
            break
    
    def sortKey(x):
        return int(x[0])
    
    studentList.sort(key=sortKey)
    
    #스튜던트 저장...
    
    filename2 = 'save.txt'
    f2 = open(filename2, 'w', encoding='utf-8')
    subCounter2 = 0
    
    for student in studentList:
        for i in student:
            if subCounter2 == 0:
                f2.write(str(i)+' ')
                subCounter2 +=1
                continue    
            if subCounter2 == 1:
                f2.write(str(i)+' ')
                subCounter2 +=1
                continue    
            if subCounter2 == 2:
                f2.write(str(i)+'\n')
                subCounter2 =0
                continue
    f2.close()
    
    

    Python의 코드로는 위와같이 짜지네요..

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)