본문 바로가기

Python_Intermediate/CSV_TSV

[CSV]Python Study - PPT Presentation Material

반응형

CSV File?

엑셀에서 사용하는 표 형식을 텍스트 형태로 변환한 파일

, 데이터 구조를 표현하는 가장 간결한 형태의 파일

엑셀의 행은 한 줄로 표현하고 엑셀의 열은 콤마로 구분

# 한 반의 성적표 데이터 예시
grade = [
    {'name': '노진구', 'kor': 10, 'eng': 30, 'math': 20},
    {'name': '비실이', 'kor': 75, 'eng': 60, 'math': 50},
    {'name': '퉁퉁이', 'kor': 13, 'eng': 55, 'math': 40}
]

# 한 줄의 내용을 구성하기 위한 문자열 템플릿
word_template = '{0}, {1}, {2}, {3}\n'

# CSV 파일 저장 위한 file 객체 생성
# Excel 의 CSV 경우 euc-kr 형식
with open('grade.csv', 'w', encoding='euc-kr') as file:
    # 첫 줄에 각 항목의 컬럼 기록
    file.write('이름, 국어, 영어, 수학\n')

    # 각 데이터를 한 줄씩 콤마로 구분하여 기록
    for item in grade:
        template = word_template.format(
            item['name'], item['kor'], item['eng'], item['math'])
        file.write(template)

grade.csv
0.00MB

# open() 함수를 사용하여 csv 파일을 읽기 위한 file 객체를 생성
with open('grade.csv', 'r', encoding='euc-kr') as file:
    # 파일의 각 로우를 원소로 갖는 리스트 생성
    # readlines() 함수를 사용하여 파일의 내용을 리스트 형태로 가져옴
    csv_list = file.readlines()
    print(csv_list)
    print('-' * 10)

# open() 함수를 사용하여 csv 파일을 읽기 위한 file 객체를 생성
with open('grade.csv', 'r', encoding='euc-kr') as file:
    # 파일의 각 로우를 원소로 갖는 리스트 생성
    # readlines() 함수를 사용하여 파일의 내용을 리스트 형태로 가져옴
    csv_list = file.readlines()
    print('-' * 10)
    # 읽어 들인 행의 수(리스트의 원소 수) 만큼 반복
    for i, v in enumerate(csv_list):
        # 읽어 들인 csv 파일의 0번째 행은 '이름, 국어, 영어, 수학' 이라는 제목이므로
        # 처리에서 제외시켜야 된다.
        if i > 0:
            # 현재 행의 내용을 콤마를 기준으로 잘라서 리스트로 변환
            # ex> '비실이, 75, 60, 50'.split(',') -> ['비실이', '75', '60', '50']
            item = v.strip().split(',')
            print(item)
    print('-' * 10)

# open() 함수를 사용하여 csv 파일을 읽기 위한 file 객체를 생성
with open('grade.csv', 'r', encoding='euc-kr') as file:
    # 파일의 각 로우를 원소로 갖는 리스트 생성
    # readlines() 함수를 사용하여 파일의 내용을 리스트 형태로 가져옴
    csv_list = file.readlines()
    print('-' * 10)
    # 읽어 들인 행의 수(리스트의 원소 수) 만큼 반복
    for i, v in enumerate(csv_list):
        # 읽어 들인 csv 파일의 0번째 행은 '이름, 국어, 영어, 수학' 이라는 제목이므로
        # 처리에서 제외시켜야 된다.
        if i > 0:
            # 현재 행의 내용을 콤마를 기준으로 잘라서 리스트로 변환
            # ex> '비실이, 75, 60, 50'.split(',') -> ['비실이', '75', '60', '50']
            item = v.strip().split(',')
            # 이름과 점수로 분리 -> 점수는 정수형 변환
            name = item[0]
            kor = int(item[1])
            eng = int(item[2])
            math = int(item[3])
            total = kor + eng + math    # 총점
            avg = total / 3             # 평균

            # 결과 출력
            print('이름 {0} / 총점 {1}점 / 평균 {2:0.2f}점'.format(name, total, avg))
    print('-' * 10)

'''
한 학급의 성적표 csv파일로 만들기
빈 칸을 작성 하시오.
'''
grade_dic = {
    '이름': ['노진구', '이슬이', '비실이', '퉁퉁이', '도라에몽'],
    '국어': [98, 88, 92, 63, 100],
    '영어': [76, 90, 70, 60, 50],
    '수학': [88, 62, 88, 31, 76],
    '과학': [64, 72, 45, 70, 88]
}

# 한 줄에 대한 템플릿
word_template = '{0},{1},{2},{3},{4}\n'
# 딕셔너리의 키를 리스트로 변환
keys = 빈칸

p = ','
# keys 리스트 사이에 쉼표를 넣어 문자열로 변환
title = 빈칸

with open('quiz_grade.csv', 'w', encoding='euc-kr') as file:
    # 첫 줄에 각 항목의 제목 기록
    file.write(title + '\n')

    # 각 데이터를 한 줄씩 콤마로 구분하여 기록
    for i in 빈칸:
        template = word_template.format(grade_dic['이름'][i], grade_dic['국어'][i],
                                        grade_dic['영어'][i], grade_dic['수학'][i],
                                        grade_dic['과학'][i])
        file.write(template)

quiz_grade.csv
0.00MB

반응형