Data_Analysis_Track_33/Python_문제풀이
Python_04-2_문제풀이(csv파일 읽어서 리스트로 정리하기)
lsc99
2023. 8. 25. 19:03
문제 내용 :
- member.csv 파일을 읽어서 각 열의 값을 배열에 담는다.
- 이름,나이,주소 형태의 csv를 읽어
names = []
ages =[]
addresses =[]
리스트에 넣는다.
- 단 첫줄은 head이므로 읽지 않는다.
- 참고 함수: 문자열 split(), for문 관련 enumerate()
member.csv 파일 내용 :
이름, 나이, 주소
유재석, 30, 서울
박명수, 35, 인천
정준하, 40, 부산
노홍철, 55, 광주
정형돈, 60, 대구
내가 해결한 방식은 아래와 같다.
import os
os.chdir(r"C:\Users\Playdata\Desktop\01_Python\data")
fr = open("member.csv", 'rt', encoding = 'utf-8') # 읽기 모드
# 값을 담을 배열
names = []
ages =[]
addresses =[]
txt = fr.read()
# print(txt) 중간의 주석처리 된 print()문은 실행하면서 중간결과 확인을 위한 print()이니 주석해제하고 해결과정을 확인할 수 있다.
s = txt.strip().split('\n') # 줄바꿈을 기준으로 리스트 정렬
# print(s)
t = [] # 빈 리스트 생성
for i in range(1, 6): # 첫 줄 head의 이름, 나이, 주소의 index = 0 이므로 head를 출력하지 않기 위해 1부터 시작한다
# print(s[i])
s1 = s[i].split(',') # ,를 기준으로 리스트 정렬
# print(s1)
t.append(s1) # 리스트에 정렬한 리스트 값 추가
# print(t)
for i in range(0, 5):
for j in range(0, 3):
if j == 0:
names.append(t[i][j]) # 이중 for문으로 t[i][0] 값들을 모두 names 리스트에 추가
elif j == 1:
ages.append(t[i][j]) # 이중 for문으로 t[i][1] 값들을 모두 ages 리스트에 추가
else:
addresses.append(t[i][j]) # 이중 for문으로 t[i][2] 값들을 모두 addresses 리스트에 추가
# 결과값 출력
print(names)
print(ages)
print(addresses)
결과는 어떻게든 나왔지만 enumerate() 사용에 익숙치 않아서 제대로 사용하지 못한 모습이다.
아래는 강사님이 해결한 방식이다.
# 강사님 버전
import os
os.chdir(r"C:\Users\Playdata\Desktop\01_Python\data")
# 값을 담을 배열
names = []
ages =[]
addresses =[]
# 한줄씩 읽어서 각각의 속성값들을 각 리스트에 추가.
# 1. 파일 연결
with open("member.csv", "rt", encoding = "utf-8" ) as fr:
for line_no, line_txt in enumerate(fr):
if line_no == 0: # 0번 라인 -> header부분 제거
continue # 다음 반복 실행
name, age, address = line_txt.strip().split(',')
names.append(name)
ages.append(age)
addresses.append(address)
print(names)
print(ages)
print(addresses)
for name, age, address in zip(names, ages, addresses):
print(f"이름 : {name}, 나이 : {age}, 주소 : {address}")
- pandas 이용
import pandas as pd # pnadas -> 3rd party lib 이다. jupyter가 아닌 Python으로 실행시 pip install pandas로 설치해야 한다.
df = pd.read_csv("member.csv")
print(df)
# 이름
print(df['이름'])
print(df[' 나이'])
df[' 주소']