다양한 포멧 데이터 수집 - 다양한 데이터 저장/읽기 - CSV 파일

2. 다양한 데이터 저장/읽기 - CSV 파일

  • CSV(Comma-Separated Values): 스프레드시트 데이터를 저장할 때 가장 널리 쓰이는 파일 형식
  • 엑셀등 여러 응용프로그램에서도 지원
  • CSV 형식 (각 열은 콤마로 구분, 각 행은 줄바꿈 문자로 구분)

    dave, david
    apple, 2
    korea, japan, chian
    
  • 파이썬에서 CSV 파일로 저장/읽기 방법

    • csv 라이브러리 사용
# csv 파일 쓰기

import csv
with open('test.csv', 'w', encoding='utf-8', newline='') as writer_csv:    # with 와 함께 쓰면 close()를 별도로 해줄 필요 없음
    writer = csv.writer(writer_csv, delimiter=',')                         # delimiter 에 구분자로 콤마(,)를 넣어줌
    writer.writerow(['love']*3 + ['banana'])                               # 하나의 row 를 리스트 형태로 입력
    writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])             # 하나의 row 를 리스트 형태로 입력

# open() 함수에 newline='' 를 넣어주는 이유는
# 윈도우의 경우 csv 모듈에서 데이타를 쓸 때 각 라인 뒤에 빈 라인이 추가되는 문제가 있기 때문
# 이를 없애기 위해 (파이썬 3 에서) 파일을 open 할 때 newline='' 와 같은 옵션을 지정
'''
love,love,love,banana
Spam,Lovely Spam,Wonderful Spam

'''
Out[6]:
'\nlove,love,love,banana\nSpam,Lovely Spam,Wonderful Spam\n\n'
import csv
with open('test.csv', 'w', encoding='utf-8', newline='') as writer_csv:    # with 와 함께 쓰면 close()를 별도로 해줄 필요 없음
    writer = csv.writer(writer_csv, delimiter=',')                         # delimiter 에 구분자로 콤마(,)를 넣어줌
    writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])             # 하나의 row 를 리스트 형태로 입력    
    writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])             # 하나의 row 를 리스트 형태로 입력        
import csv
with open('test.csv', 'w', encoding='utf-8', newline='') as writer_csv:    # with 와 함께 쓰면 close()를 별도로 해줄 필요 없음
    writer = csv.writer(writer_csv, delimiter=',')                         # delimiter 에 구분자로 콤마(,)를 넣어줌
    writer.writerow(['dave', 'david'])             # 하나의 row 를 리스트 형태로 입력    
    writer.writerow(['apple', 2])             # 하나의 row 를 리스트 형태로 입력     
    writer.writerow(['korea', 'japan', 'chian'])             # 하나의 row 를 리스트 형태로 입력         
dave, david
apple, 2
korea, japan, chian
import csv

with open('test.csv', 'w', encoding='utf-8', newline='') as files:
    writer = csv.writer(files, delimiter=',')
    writer.writerow(['dave', 'david'])
    writer.writerow(['apple', 2])
    writer.writerow(['korea', 'japan', 'chian'])
# csv 파일 쓰기

import csv
with open('test.csv', 'r', encoding='utf-8') as reader_csv:
    reader = csv.reader(reader_csv, delimiter=',')
    
    for row in reader:
        print (row)
['dave', 'david']
['apple', '2']
['korea', 'japan', 'chian']
# csv 파일 쓰기 (사전 타입으로 파일 쓰기)

import csv

with open('test.csv', 'w', encoding='utf-8', newline='') as writer_csv:
    field_name_list =['First Name', 'Last Name']
    writer = csv.DictWriter(writer_csv, fieldnames=field_name_list)
    writer.writeheader()
    writer.writerow({'First Name': 'Dave', 'Last Name': 'Lee'})
    writer.writerow({'First Name': 'David', 'Last Name': 'Kim'})
    writer.writerow({'First Name': 'Robin', 'Last Name': 'Park'})
Name1, Name2
dave, david
apple, 2
korea, japan
# csv 파일 쓰기 (사전 타입으로 파일 읽기)

import csv

with open('test.csv', 'r', encoding='utf-8') as reader_csv:
    reader = csv.DictReader(reader_csv)
    for row in reader:
        print(row['First Name'], row['Last Name'])
Dave Lee
David Kim
Robin Park
# pandas 라이브러리에서 csv 파일 읽기1
# dataframe 을 csv 파일로 저장하기 위해서는 to_csv() 메서드를 사용함

import pandas as pd
doc = pd.read_csv("test.csv", quotechar=',')
doc
Out[41]:
First Name Last Name
0 Dave Lee
1 David Kim
2 Robin Park
# pandas 라이브러리에서 csv 파일 읽기2 (header 제거)

import pandas as pd
doc = pd.read_csv("test.csv", header=None)
doc
Out[19]:
0 1
0 First Name Last Name
1 Dave Lee
2 David Kim
3 Robin Park
# pandas 라이브러리에서 csv 파일 읽기2 (특정 필드만 읽기)

import pandas as pd
doc = pd.read_csv("test.csv", names=['First Name'])
doc
Out[20]:
First Name
First Name Last Name
Dave Lee
David Kim
Robin Park