[ CSV 파일 ]
CSV ( Comma Separated Values ) : 콤마로 구분한 텍스트 데이터 혹은 텍스트 파일
한 줄이 하나의 행이 되고 콤마를 기준으로 열을 구분
많은 양의 데이터를 다룰 경우 데이터의 전체 크기를 줄이기 위해서 데이터 자체를 확장자 CSV로 저장함
* 데이터의 양 자체를 줄이는 것이 아님
CSV 파일은 텍스트 형식으로 데이터를 제외한 불필요한 요소들은 모두 제거되는 방식으로 저장된다.
CSV 파일 라이브러리의 reader는 읽기를 담당하고 writer는 쓰기를 담당한다.
[ CSV 파일 쓰기 ]
open 함수
open 함수는 '파일 경로'에 해당하는 파일을 열고 파일 객체를 리턴해줌
open 함수가 실제로 파일을 읽는 것이 아니라 파일을 읽기 가능하게 해주는거임
open(" 파일경로 ", [ 읽기,쓰기 옵션 ] , [ 기타 옵션 ] )
파일을 읽는 경우 ("r")에는 파일에 영향을 주지 않지만 이미 데이터가 있는 파일에 추가로 쓰게 되는 경우는
내용을 없애고 새로 쓰게됨
# 파일 읽고 쓰기
text_save = open( "text.txt" , "w" , encoding="UTF8" )
text_save.write(text) #text는 전달받은 문자열 변수값
text_save.close()
fhand = open( "text.txt", "r", encoding="UTF8" )
close 함수를 사용해서 open 함수를 사용해서 열었던 파일을 꼭 닫아줘야함
파일을 닫지 않는다면 변경 사항이 저장되지 않거나 게속 open 되어있는 상태이기 때문에 파일 손상 가능성 존재
writerow 함수
writerow 함수는 write 객체를 생성하고 직접 CSV 파일에 데이터를 작성하는 함수
[ writer객체 ].writerow( 열에 넣을 데이터 리스트 )
writerow 함수는 인자로 리스트를 받고 그 리스트의 한 행은 CSV 파일에서 하나의 행이 됨
import csv
f = open("./example.csv", 'w')
# csv 파일을 작성하는 객체 변수 wtr 생성
wtr = csv.writer(f)
wtr.writerow(['이름','나이','언어'])
name_list = ['aa','bb','cc']
age_list = [25,24,23]
lan_list = ['Python', 'C++', 'JAVA']
for index in range(3) :
name = name_list[index]
age = age_list[index]
language = lan_list[index]
wtr.writerow([name, age, language])
f.close()
위 코드를 실행시켜보면 해당 파일에 'example.csv' 파일이 생성되어 있음. 파일을 열어서 확인해보면


writerow 함수가 데이터를 한 행씩 넘어가면서 저장하는 것을 확인 가능.
open 함수에 newline = ''를 추가해주면 문제 해결 가능


[ CSV 파일 읽기 ]
CSV 파일은 모든 데이터를 이중 리스트 형태로 갖고 있음.
리스트를 출력하기 위해서는 반복문을 사용해서 행별로 데이터를 출력해줘야함
import csv
f = open("./example.csv", 'r')
# csv 파일의 모든 데이터를 행별로 출력
rdr = csv.reader(f)
for row in rdr :
print(row)
f.close()

next 함수 사용
next 함수를 사용하면 맨 첫 줄인 한 줄을 건너 뛸 수 있음.
next(rdr)
[ CSV 파일에 행 추가 ]
추가 모드 옵션 'a'
이미 존재하는 CSV 파일에 데이터를 추가하기 위해서는 open 함수에 옵션을 'a' 사용
import csv
f = open("./example.csv", 'a', newline='')
# csv 파일의 모든 데이터를 행별로 출력
wtr = csv.writer(f)
wtr.writerow(['dd',22,'C'])
wtr.writerow(['ee',21, 'JAVA'])
f.close()

[ 12일차 문제 ]

import csv
f = open("./covid19_articles.csv", 'r')
rdr = csv.reader(f)
next(rdr)
count = 0
for row in rdr :
#if '[속보]' in row[2] :
if row[2][:4] == '[속보]' :
print(row[2])
count += 1
print("속보 기사 개수 :",count)
f.close()

저작권 출처 : https://cafe.naver.com/codeuniv
코딩 커뮤니티 - 코뮤니티 [파이썬/... : 네이버 카페
코뮤니티 [코딩공부/독학/스터디/대외활동] : python, C언어, java, 자바스크립트, HTML, CSS, 웹/앱개발
cafe.naver.com
'DATA > [ 모각코+ 12월 과정 ] 웹 크롤링' 카테고리의 다른 글
| [ 모각코+ 14일차 ] 로그인 페이지 동적 크롤링하기 (0) | 2022.01.07 |
|---|---|
| [ 모각코+ 13일차 ] CSV 파일 동적 크롤링하기 (0) | 2022.01.06 |
| [ 모각코+ 11일차 ] 동적 크롤링 사용해보기 ② (0) | 2022.01.04 |
| [ 모각코+ 10일차 ] 동적 크롤링 사용해보기 ① (0) | 2022.01.01 |
| [ 모각코+ 9일차 ] 정적 크롤링 사용해보기 ④ (0) | 2021.12.30 |