inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 처음하는 파이썬 데이터 분석 (쉽게! 전처리, pandas, 시각화 전과정 익히기) [데이터분석/과학 Part1]

CSV 포맷 이해와 파이썬으로 CSV 파일 다루기 (업데이트)

CSV 파일 쓰기 다른 기법(사전 타입으로 쓰기) 관련

177

김민석

작성한 질문수 3

0

import csv

with open('C:/Users/User/Desktop/data_learning_analysis/PANDASPLOTLY_FUNCODING_FULLDATA_20240601/00_Material(Uploaded)/00_data/tmp_csv.csv', 'r', encoding='utf-8-sig', newline='') as reader_csv:

reader = csv.DictReader(reader_csv)

for row in reader:

print(row['first Name'], row['Last Name'])

 

 

with open함수에서 읽기코드(r)은 정상작동이 되는데

쓰기코드(w)로 쓰면 오류가 나는 이유를 알고 싶습니다

python pandas

답변 1

0

잔재미코딩 DaveLee

안녕하세요. 답변 도우미입니다.


1. r(읽기) 모드와 w(쓰기) 모드의 차이점

  • r (read): 파일에서 데이터를 읽어오기 위해 열며, 파일이 이미 존재해야 합니다.

  • w (write): 파일에 데이터를 쓰기 위해 열며, 파일이 존재하지 않으면 새로 만들고, 존재하면 내용을 전부 지운 뒤(truncate) 새로 쓰기 시작합니다.

즉, r 모드로 열면 기존 파일 내용을 읽을 수 있지만, w 모드로 열면 기존에 있던 내용이 모두 지워진 상태(또는 새 파일)에서 파일 핸들을 받게 됩니다.


2. DictReader가 동작하는 방식

import csv
​
with open('파일경로', 'r', encoding='utf-8-sig', newline='') as reader_csv:
    reader = csv.DictReader(reader_csv)
    for row in reader:
        print(row['first Name'], row['Last Name'])

위 코드에서 csv.DictReaderCSV 파일의 첫 줄(헤더)을 읽어서 {'컬럼명': '값'} 형태의 딕셔너리를 만들어 줍니다.

  • r 모드: 파일에 이미 내용(헤더와 데이터)이 있으므로, DictReader가 CSV 헤더를 찾아 딕셔너리를 잘 만들어냅니다.

  • w 모드: 파일 내용을 전부 지워버린 뒤에 (혹은 새로 만든 상태에서) DictReader를 호출하게 되면, 헤더 자체가 없는 빈 파일이므로 DictReader가 인식할 컬럼명이 전혀 없습니다.

결과적으로 파일이 비어 있어서 DictReader에 의해 'first Name'이나 'Last Name'과 같은 키를 찾을 수 없게 되어 에러(KeyError 등)가 발생하거나, 내부적으로 파일 포인터가 읽을 내용을 찾지 못해 에러가 생기게 됩니다.


3. 해결 방법

  1. 파일에서 읽어야 할 경우:

    • r 모드로 열고 DictReader 사용

    • 이미 존재하는 파일을 읽어서 무언가 처리가 필요하다면, 읽기 모드를 사용해야 함

  2. 파일에 써야 할 경우:

    • w 모드로 열 때는, DictWriter 등을 사용해서 새로운 CSV 파일을 생성하겠다는 의도로 접근

    • 만약 기존 파일에 덧붙여 써야 한다면 a(append) 모드 사용 고려

예를 들어, “기존 파일을 읽어온 뒤 가공한 데이터를 다시 다른 파일로 출력”하려면 다음과 같이 코드를 분리해야 합니다.

import csv
​
# 읽기
with open('input.csv', 'r', encoding='utf-8-sig', newline='') as f:
    reader = csv.DictReader(f)
    rows = [row for row in reader]
​
# rows 처리 로직 ...
​
# 쓰기
with open('output.csv', 'w', encoding='utf-8-sig', newline='') as f:
    fieldnames = ['first Name', 'Last Name']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
​
    for row in rows:
        writer.writerow({'first Name': row['first Name'],
                         'Last Name':  row['Last Name']})

위와 같이 “읽을 때는 읽기 모드(r)”, “쓸 때는 쓰기 모드(w)”로 다른 파일이든 같은 파일이든 구분하여 적절히 사용하면, DictReader/DictWriter를 올바로 활용할 수 있습니다.


Python 3 표시 없습니다.

0

51

1

강의실습 말고 강의에 대한 자료(pdf)가 없을까요?

0

64

1

구글 코랩과 아나콘다

0

78

1

강의와 다르게 오류가 뜨는 이유가 뭘까요?

0

94

1

COVID-19-master 관련 등 자료 누락

0

81

1

수업자료에 python_core_summary.ipynb 파일이 포함되어 있지 않습니다!

1

94

1

json.dumps관련된 질문

0

70

1

빅분기대비

0

110

1

파이썬으로 Plain Text 포멧 파일 다루기 연습문제 질문

0

92

1

강의자료 어디서 다운로드받나요?

0

137

1

pandas 라이브러리의 quotechar 인자에 대해 질문드립니다

0

96

1

iplot 에러 문제

1

199

1

플래그

0

74

1

플래그 라이브러리

0

81

1

CSV 파일 읽을 때 오류

0

189

1

read() 함수 사용할 때 3번째 줄에 data로 출력 또는 print(data)로 출력 차이

0

135

1

강의 교재 및 실습 파일 제공되나요?

0

177

1

deep_data_and_visual 파일에서 에러가 납니다.

0

180

1

apply()함수

0

199

1

pandas groupby sum 질문

1

269

1

pandas_eda 자료 맨아래 heatmap 숫자가 안나옵니다

0

348

2

pandas_eda 힛맵에서 숫자가 안떠요

0

252

1

수업 자료에 pandas_basic 파일이 없습니다..!

0

274

1

EDA기본패턴 적용을 위한 pandas문법에서 필요한 파일이 파이썬에서 안옮겨집니다

0

201

1