파이썬을 활용한 CSV 파일 입출력 예제 with faker

Page content

강의 홍보

사전 작업

  • 우선 임시 데이터를 기록할 라이브러리인 faker 를 설치한다.
  • 흔히 쓰이는 필드들을 함수 하나로 쉽게 만들 수 있도록 지원한다.
(venv) $ pip3 install faker

데이터 생성하기 전체 코드

  • 필자는 [writecsv.py](http://writecsv.py) 형태로 저장하였다.
  • 먼저 한줄 씩 설명하면 다음과 같다.
from faker import Faker
import csv
output=open('mydata.csv', mode = 'w')
fake=Faker()
header=['name','age','street','city','state','zip','lng','lat']
mywriter=csv.writer(output)
mywriter.writerow(header)
for r in range(1000):
    mywriter.writerow([fake.name(),fake.random_int(min=18, max=80, step=1), fake.street_address(), fake.city(),fake.state(),fake.zipcode(),fake.longitude(),fake.latitude()])
output.close()
  • from faker import Faker 는 라이브러리를 불러오는 것이다.
  • import csv.csv 파일로 만들어주는 함수를 제공한다.
  • 이제 하나씩 살펴보도록 한다.
output=open('mydata.csv','w')
  • 파일을 쓰기 모드로 연다는 뜻이며, w 파일 쓰기 모드로 지정한다.
  • 읽기 전용 모드로 사용하려면 r ,
  • 기존 내용에 덧붙여 쓴다면, a,
  • 읽기와 쓰기가 모두 가능한 파일 모드는 r+ ,
  • 마지막으로 텍스트가 아닌 파일을 다룰 때는 b 붙인다. 예를 들면, 데이터를 바이트 단위로 기록하려면 mode = "wb" 로 지정한다.

fake = Faker()
  • fakeFaker() 클래스의 객체를 생성했다는 것을 의미한다.

header=['name','age','street','city','state','zip','lng','lat']
  • header라는 리스트 객체를 만들고, 그 안에 각종 데이터가 들어갈 컬럼명을 추가했다.

mywriter=csv.writer(output)
mywriter.writerow(header)
for r in range(1000):
    mywriter.writerow([fake.name(),fake.random_int(min=18, max=80, step=1), fake.street_address(), fake.city(),fake.state(),fake.zipcode(),fake.longitude(),fake.latitude()])
output.close()
  • csv.writer 객체를 생성하여 mywriter로 지정한다.
  • 그리고, header를 writerow()로 추가하면, 일종의 컬럼값이 우선 만들어진다.
  • 그 후에, 데이터 행을 파일에 기록하는 코드를 fake 내 함수를 반복문으로 활용하여 만든 것이다.
  • 모든 작업이 완료가 되었으면 output.close() 로 종료 한다.

(venv) $ python3 ch01_loadcsv.py
(venv) $ ls
ch01_loadcsv.py data.csv
  • 파일을 실행하면 위와 같이 데이터가 만들어진 것을 볼 수 있다.
  • 실제 아래와 같이 나온 것을 확인할 수 있다.

loadcsv_01.png

데이터 읽기 전체 코드

  • 필자는 readcsv.py 로 저장하였다.
  • 전체 코드는 다음과 같다.
import csv

with open('data.csv') as f:
	myreader=csv.DictReader(f)
	headers=next(myreader)
	index = 0
	for row in myreader:
		names = row['name']
		index += 1
		print(index, names)
		if index == 10:
			break
  • csv.DictReader() 함수를 활용하여 Dictionary 형태로 반환한다.
  • 즉, key-value의 특성을 가진 형태로 돌려주어 보다 쉽게 반복문을 수행할 수 있도록 도와준다.
  • 데이터가 약 1000개 정도 되기 때문에, 중간에 index 인수를 넣어서, 반복문에 숫자를 부여했고 index가 10이 되면 반복문을 종료하는 코드를 중간에 삽입하였다.
  • 이제 파일을 실행하면 다음과 같은 결괏값이 나온다.
(venv) $ python3 ch01_readcsv.py 
1 Victoria Rowland
2 Amber Willis
3 Carolyn Hess
4 Brian Hill
5 Shawn Perez
6 Alexander Logan
7 Timothy Jenkins
8 Stephen Fry
9 Tammy Miller
10 Sarah Tyler

References