파이썬을 활용한 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()
fake
는Faker()
클래스의 객체를 생성했다는 것을 의미한다.
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
- 파일을 실행하면 위와 같이 데이터가 만들어진 것을 볼 수 있다.
- 실제 아래와 같이 나온 것을 확인할 수 있다.
데이터 읽기 전체 코드
- 필자는
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
- Data Engineering with Python by Paul Crickard, https://www.packtpub.com/product/data-engineering-with-python/9781839214189