외부파일(CSV, EXCEL) 읽기, 쓰기

이번에는 파이썬 형식으로 된 모듈이 아닌, 외부파일을 읽고, 쓰기 작업을 해본다.
open()
close()
with, as

# CSV 파일 읽기

sample1.csv 파일은 데이터들이 ,로 구분 되어져 있다.
sample1.csv 파일

1
2
3
4
5
6
7
8
9
10
11
번호, 이름, 가입일시, 나이
1, 김정수, 2017-01-19 11:30:00, 25
2, 박민구, 2017-02-07 10:22:00, 35
3, 정순미, 2017-01-22 09:10:00, 33
4, 김정현, 2017-02-22 14:09:00, 45
5, 홍미진, 2017-04-01 18:00:00, 17
6, 김순철, 2017-05-14 22:33:07, 22
7, 이동철, 2017-03-01 23:44:45, 27
8, 박지숙, 2017-01-11 06:04:18, 30
9, 김은미, 2017-02-08 07:44:33, 51
10, 장혁철, 2017-12-01 13:01:11, 16

csv파일도 똑같이 파일 open() 함수를 사용하여 불러온다.
read() 대신 csv.reader() 로 불러온 파일을 읽어들인다.

1
2
3
4
5
6
7
import csv

with open('./resource/sample1.csv', 'r') as f:
reader = csv.reader(f)

for c in reader:
print(c)
1
2
3
4
5
6
7
8
9
10
11
['번호', '이름', '가입일시', '나이']
['1', '김정수', '2017-01-19 11:30:00', '25']
['2', '박민구', '2017-02-07 10:22:00', '35']
['3', '정순미', '2017-01-22 09:10:00', '33']
['4', '김정현', '2017-02-22 14:09:00', '45']
['5', '홍미진', '2017-04-01 18:00:00', '17']
['6', '김순철', '2017-05-14 22:33:07', '22']
['7', '이동철', '2017-03-01 23:44:45', '27']
['8', '박지숙', '2017-01-11 06:04:18', '30']
['9', '김은미', '2017-02-08 07:44:33', '51']
['10', '장혁철', '2017-12-01 13:01:11', '16']

딕셔너리형태로 읽어오기

reader() 대신 csv 클래스 옵션에 csv.DictReader() 로 딕셔너리 형태로 읽어온다.

1
2
3
4
5
6
7
with open('./resource/sample1.csv', 'r', encoding='CP949') as f:
reader = csv.DictReader(f)

for c in reader:
for k, v in c.items():
print(k, v)
print('---------------')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
번호 1
이름 김정수
가입일시 2017-01-19 11:30:00
나이 25
---------------
번호 2
이름 박민구
가입일시 2017-02-07 10:22:00
나이 35
---------------
번호 3
이름 정순미
가입일시 2017-01-22 09:10:00
나이 33
---------------
번호 4
이름 김정현
가입일시 2017-02-22 14:09:00
나이 45
---------------
번호 5
이름 홍미진
가입일시 2017-04-01 18:00:00
나이 17
---------------
번호 6
이름 김순철
가입일시 2017-05-14 22:33:07
나이 22
---------------
번호 7
이름 이동철
가입일시 2017-03-01 23:44:45
나이 27
---------------
번호 8
이름 박지숙
가입일시 2017-01-11 06:04:18
나이 30
---------------
번호 9
이름 김은미
가입일시 2017-02-08 07:44:33
나이 51
---------------
번호 10
이름 장혁철
가입일시 2017-12-01 13:01:11
나이 16
---------------

csv파일 옵션 주기

sample2.csv 파일의 데이터들은 | 로 구분되어져 있다.
sample2.csv

1
2
3
4
5
6
7
8
9
10
11
번호|이름|가입일시|나이
1|김정수|2017-01-19 11:30:00|25
2|박민구|2017-02-07 10:22:00|35
3|정순미|2017-01-22 09:10:00|33
4|김정현|2017-02-22 14:09:00|45
5|홍미진|2017-04-01 18:00:00|17
6|김순철|2017-05-14 22:33:07|22
7|이동철|2017-03-01 23:44:45|27
8|박지숙|2017-01-11 06:04:18|30
9|김은미|2017-02-08 07:44:33|51
10|장혁철|2017-12-01 13:01:11|16

csv파일 데이터를 읽어오는데 | 를 없애는 옵션을 넣어 불러오면 깔끔하게 불러온 것을 볼수 있다.
delimiter='|'

1
2
3
4
5
with open('./resource/sample2.csv', 'r') as f:
reader = csv.reader(f, delimiter='|')

for c in reader:
print(c)
1
2
3
4
5
6
7
8
9
10
11
['번호', '이름', '가입일시', '나이']
['1', '김정수', '2017-01-19 11:30:00', '25']
['2', '박민구', '2017-02-07 10:22:00', '35']
['3', '정순미', '2017-01-22 09:10:00', '33']
['4', '김정현', '2017-02-22 14:09:00', '45']
['5', '홍미진', '2017-04-01 18:00:00', '17']
['6', '김순철', '2017-05-14 22:33:07', '22']
['7', '이동철', '2017-03-01 23:44:45', '27']
['8', '박지숙', '2017-01-11 06:04:18', '30']
['9', '김은미', '2017-02-08 07:44:33', '51']
['10', '장혁철', '2017-12-01 13:01:11', '16']

# CSV 파일 쓰기

이번에는 csv파일을 생성하고, 쓰기도 해본다.
csv.writer()writerow() 사용한다.

1
2
3
4
5
6
7
w = [[1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18]]

with open('./resource/sample3.csv', 'w') as f:
wt = csv.writer(f)

for v in w:
wt.writerow(v)

resource/ 디렉토리 안에 sample3.csv 파일이 생성되고 안에 쓴 데이터가 들어가있다.

1
2
3
4
5
6
1,2,3
4,5,6
7,8,9
10,11,12
13,14,15
16,17,18

위처럼 다량의 데이터를 한번에 쓰려면 writerows() 를 이용하여 간단하게 할 수도 있다.

1
2
3
4
5
w = [[1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18]]

with open('./resource/sample4.csv', 'w') as f:
wt = csv.writer(f)
wt.writerows(w)
1
2
3
4
5
6
1,2,3
4,5,6
7,8,9
10,11,12
13,14,15
16,17,18

# EXCEL 파일 열기

엑셀 파일 형식은 XSL, XLSX
엑셀 파일 열기 패키지로 pandas를 주로 이용(openpyxl, xlrd)

pip 로 pandas, openpyxl, xlrd 설치

1
2
3
$ pip install pandas
$ pip install openpyxl
$ pip install xlrd

pandas로 엑셀 파일을 열어보자.

read_excel()

1
2
3
import pandas as pd

xlsx = pd.read_excel('./resource/sample.xlsx')
1
2
# head(): 처음부터 5개까지
print(xlsx.head())
1
2
3
4
5
6
  Sap Co.      대리점 영업사원       전월       금월  TEAM  총 판매수량
0 KI1316 경기수원대리점 이기정 1720000 2952000 1 123
1 KI1451 충청홍성대리점 정미진 4080000 2706000 2 220
2 KI1534 경기화성대리점 경인선 600000 2214000 1 320
3 KI1636 강원속초대리점 이동권 3720000 2870000 3 110
4 KI1735 경기안양대리점 강준석 4800000 2296000 1 134
1
2
# tail(): 끝에서 5개까지
print(xlsx.tail())
1
2
3
4
5
6
   Sap Co.       대리점 영업사원       전월       금월  TEAM  총 판매수량
15 KI2870 경기구리시대리점 박진형 6000000 3400000 2 143
16 KI2910 강원춘천대리점 김은향 4800000 4896000 1 176
17 KI3030 강원영동대리점 전수창 4560000 3128000 2 98
18 KI3131 경기하남대리점 김민정 2750000 7268000 3 293
19 KI3252 강원포천대리점 서가은 2420000 4740000 4 240
1
2
# 행, 열
print(xlsx.shape)
1
(20, 7)

# EXCEL 파일 쓰기

1
xlsx = pd.read_excel('./resource/sample.xlsx')

엑셀파일로 쓰기

to_excel()

1
xlsx.to_excel('./resource/result.xlsx', index=False)

csv파일로 쓰기

to_csv()

1
xlsx.csv('./resource/result.csv', index=False)

# 키워드

  • csv
    • csv.reader()
      • csv.reader(delimiter=’’)
      • csv.dicReader()
    • csv.writer()
      • writerow()
      • writerows()
  • pandas
    • read_excel()
  • to_excel()
  • to_csv()
Share