반응형
• 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)
# 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)
반응형