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[' 주소']