needmoreeasy EN 한국어
배우기

40 — 보고서 — 요약 파일 쓰기

★★★★☆ (4/5)파일/프로젝트
선수 지식
35 — 일기, 30 — 데이터
결과물
JSON 데이터 파일 몇 개를 읽어 file_write로 요약 보고서 하나를 쓰는 프로그램

JSON 파일 하나는 한 종류의 데이터를 담고, 보고서는 여러 데이터를 합칩니다. 이 가이드는 점수 파일과 선수 파일을 읽어 짧은 요약 — 평균, 최고 득점자, 팀별 선수 수 — 을 계산하고, 35 가이드의 파일쓰기report.txt 하나에 씁니다.

단계

  1. 데이터 파일 두 개를 만듭니다. scores.json은 각 선수를 점수와 묶고, players.json은 각 선수를 팀과 묶습니다:

    [
      {"name": "미나", "score": 7},
      {"name": "사나", "score": 9},
      {"name": "준호", "score": 5}
    ]
    
    실행해 보기 →
    [
      {"name": "미나", "team": "서울"},
      {"name": "사나", "team": "부산"},
      {"name": "준호", "team": "서울"}
    ]
    

    각 파일은 딕셔너리들의 목록입니다. 38 가이드의 questions.json과 똑같습니다. name 키가 서로 맞아떨어져 두 파일이 같은 선수들에 관한 것임을 알려 줍니다.

  2. 14 가이드의 json읽기로 두 파일을 불러옵니다. 호출 두 번, 목록 두 개:

    파일 사용 최신
    점수들 = json읽기("scores.json")
    선수들 = json읽기("players.json")
    말해 f"점수 {len(점수들)}개와 선수 {len(선수들)}명을 불러왔습니다"
    
    실행해 보기 →

    점수 3개와 선수 3명을 불러왔습니다가 출력됩니다.

  3. for 반복으로 점수를 훑어 합계와 최고 득점자를 찾습니다. 최고점수 비교가 지금까지 본 가장 큰 값을 기억합니다:

    합계 = 0
    최고이름 = ""
    최고점수 = -1
    for p in 점수들:
        합계 = 합계 + p["score"]
        if p["score"] > 최고점수:
            최고점수 = p["score"]
            최고이름 = p["name"]
    평균 = 합계 / len(점수들)
    
    실행해 보기 →

    30 가이드의 달리는 합계와 달리는 최댓값 패턴을, 이번에는 숫자 대신 딕셔너리를 훑으면서 쓴 것입니다.

  4. 딕셔너리로 팀별 선수 수를 셉니다. 처음 보는 팀은 1부터 시작하고, 다시 보는 팀은 하나씩 늘어납니다:

    팀별 = {}
    for p in 선수들:
        팀 = p["team"]
        if 팀 in 팀별:
            팀별[팀] = 팀별[팀] + 1
        else:
            팀별[팀] = 1
    
    실행해 보기 →
  5. 보고서를 줄 목록으로 만들고 "\n".join(줄들)로 잇습니다. 파일쓰기("report.txt", 내용)이 긴 글 전체를 한 번에 저장합니다 — 35 가이드가 일기 메모를 저장한 바로 그 도우미입니다:

    줄들 = []
    줄들.append("경기 보고서")
    줄들.append("선수 수: " + str(len(선수들)))
    줄들.append("평균 점수: " + str(평균))
    줄들.append("최고 득점자: " + 최고이름 + " (" + str(최고점수) + "점)")
    for 팀 in sorted(팀별):
        줄들.append(팀 + ": " + str(팀별[팀]) + "명")
    내용 = "\n".join(줄들)
    파일쓰기("report.txt", 내용)
    
    실행해 보기 →

    sorted(팀별)이 팀을 일정한 순서로 보여 줍니다 — 39 가이드의 정렬된 숫자와 같습니다.

  6. 전체 프로그램을 한 파일에 담습니다. report.ko.nme로 저장합니다:

    # 보고서: JSON 데이터 파일 두 개를 읽어 요약 파일 하나를 쓰기
    # 실행: nme 실행 report.ko
    # scores.json과 players.json 파일이 같은 폴더에 있어야 합니다.
    
    파일 사용 최신
    
    점수들 = json읽기("scores.json")
    선수들 = json읽기("players.json")
    
    말해 f"점수 {len(점수들)}개와 선수 {len(선수들)}명을 불러왔습니다"
    
    합계 = 0
    최고이름 = ""
    최고점수 = -1
    for p in 점수들:
        합계 = 합계 + p["score"]
        if p["score"] > 최고점수:
            최고점수 = p["score"]
            최고이름 = p["name"]
    
    평균 = 합계 / len(점수들)
    
    팀별 = {}
    for p in 선수들:
        팀 = p["team"]
        if 팀 in 팀별:
            팀별[팀] = 팀별[팀] + 1
        else:
            팀별[팀] = 1
    
    줄들 = []
    줄들.append("경기 보고서")
    줄들.append("선수 수: " + str(len(선수들)))
    줄들.append("평균 점수: " + str(평균))
    줄들.append("최고 득점자: " + 최고이름 + " (" + str(최고점수) + "점)")
    for 팀 in sorted(팀별):
        줄들.append(팀 + ": " + str(팀별[팀]) + "명")
    
    내용 = "\n".join(줄들)
    파일쓰기("report.txt", 내용)
    
    말해 "report.txt를 만들었습니다:"
    말해 내용
    
    실행해 보기 →
  7. 실행하고, 프로그램이 쓴 파일을 봅니다:

    nme 실행 report.ko
    cat report.txt
    
    점수 3개와 선수 3명을 불러왔습니다
    report.txt를 만들었습니다:
    경기 보고서
    선수 수: 3
    평균 점수: 7.0
    최고 득점자: 사나 (9점)
    부산: 1명
    서울: 2명
    
    경기 보고서
    선수 수: 3
    평균 점수: 7.0
    최고 득점자: 사나 (9점)
    부산: 1명
    서울: 2명
    

    콘솔과 파일에 같은 보고서가 보입니다. 한 프로그램이 데이터 파일 두 개를 읽을 수 있는 요약 하나로 바꿨습니다.

  8. 영어는 use file latest, json_load, file_write를 씁니다. 전체 영어 프로그램은 영어 가이드에 있습니다.

직접 해보기

JSON 파일 두 개에 선수 한 명씩을 추가하고 report.ko.nme를 다시 실행해 보세요. 숫자와 평균이 함께 바뀝니다. 그런 다음 최고점수 비교처럼 최저점수를 추적해 줄들.append("최저 점수: ...") 줄을 추가해 보세요.

배운 것

  • json읽기가 JSON 파일 하나마다 각각의 딕셔너리 목록으로 읽습니다.
  • 달리는 합계와 달리는 최댓값을 가진 for 반복이 점수를 요약합니다.
  • 딕셔너리가 팀별 선수 수 같은 그룹을 셉니다.
  • 파일쓰기("report.txt", 내용)이 여러 줄 보고서 전체를 한 번에 저장합니다.
  • 데이터 파일은 데이터로 남고, 프로그램이 그것을 보고서로 만듭니다.

GitHub에서 이 문서 보기