์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ (ํจ์บ ์์ ์ ๋ฆฌ)
<์ด์ ๊ธ>
https://silvercoding.tistory.com/43
[python ๊ธฐ์ด] 11. ์์ธ ์ข ๋ฅ์ ์ฒ๋ฆฌ , try , except , else, raise
์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ (ํจ์บ ์์ ์ ๋ฆฌ) <์ด์ ๊ธ> https://silvercoding.tistory.com/42 https://silvercoding.tistory.com/41 https://silvercoding.tistory.com/40 https://silvercoding.tistory.com/39..
silvercoding.tistory.com
import csv
์ฐ์ ํ์ด์ฌ์์ csv๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด import ํด์ค๋ค.
- ์์ 1
with open('./resource/sample1.csv', 'r') as f:
reader = csv.reader(f)
# next(reader) # Header ์คํต
# ํ์ธ
print(reader)
print(type(reader))
print(dir(reader))
print()
for c in reader:
print(c) # ํ๋์ row๊ฐ ๋ฆฌ์คํธ ํ์์ผ๋ก ๋์จ๋ค.
<_csv.reader object at 0x0000013CD5F8E868>
<class '_csv.reader'>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'dialect', 'line_num']
['๋ฒํธ', '์ด๋ฆ', '๊ฐ์
์ผ์', '๋์ด']
['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']
์ฌ๊ธฐ์ header๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ์ผ๋ฉด ์์ ์ฃผ์์ผ๋ก ์์ฑ๋์ด ์๋ next(reader)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์์ 2 : delimiter
vs๋ก ์ฌ๋๊น ๊ธ์จ๊ฐ ๊นจ์ง์ง๋ง ์ฝค๋ง๊ฐ ์๋ |๋ก ๊ตฌ๋ถ๋์ด ์๋ csvํ์ผ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ถ์๋ฅผ , ์์ | ๋ก ๋ฐ๊พธ์ด์ฃผ์ด์ผ ํ๋ค.
with open('./resource/sample2.csv', 'r') as f:
reader = csv.reader(f, delimiter='|')
# next(reader) # Header ์คํต
# ํ์ธ
print(reader)
print(type(reader))
print(dir(reader))
print()
for c in reader:
print(c)
<_csv.reader object at 0x0000013CD5EA5798>
<class '_csv.reader'>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'dialect', 'line_num']
['๋ฒํธ', '์ด๋ฆ', '๊ฐ์
์ผ์', '๋์ด']
['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']
delimiter = '|' ๋ฅผ ์ฌ์ฉํ๋๋ ์ ๋๋์ด์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
- ์์ 3 : dictionary๋ก ์ฝ์ด์ค๊ธฐ => DictReader
with open('./resource/sample1.csv', 'r') as f:
reader = csv.DictReader(f)
for c in reader:
for k, v in c.items():
print(k, v)
print("------------------")
๋ฒํธ 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
------------------
DictReader๋ฅผ ํตํ์ฌ ๋์ ๋๋ฆฌ๋ก ์ฝ์ด์ค๋ฉด ,
OrderedDict([('๋ฒํธ', '1'), ('์ด๋ฆ', '๊น์ ์'), ('๊ฐ์ ์ผ์', '2017-01-19 11:30:00'), ('๋์ด', '25')])
์ด๋ฐ ์์ผ๋ก ํ๋์ ์ค๋ง๋ค OrderedDict๊ฐ ์์ฑ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ ์ฝ๋๋ก key์ value๋ฅผ ๋ฝ์๋ด์ค ์ ์๋ ๊ฒ์ด๋ค.
- ์์ 4 : writerow
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', newline='') as f:
wt = csv.writer(f)
for v in w:
wt.writerow(v) # ํ๋ํ๋ ๊ฒ์ํด์ ์ธ ๋ (if๊ฐ์ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ ๋ )
writerow๋ก ํ์ค์ฉ ๊ฒ์ํด๊ฐ๋ฉฐ ์์ฑ์ ํด์ค ์ ์๋ค.
- ์์ 5 : writerows
with open('./resource/sample4.csv', 'w', newline='') as f:
wt = csv.writer(f)
wt.writerows(w) # ์์ ํ๋ฒ์ ์ฐ๋ ๊ฒ
ํ๋ฒ์ ์ฐ๋ writerowsํจ์๋ ์กด์ฌํ๋ค. for๋ฌธ์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
- ์์ 6 : excel
* XSL, XLSX
: openpyxl, xlswriter, xlrd, xlwt, xlutils
: pandas ๋ฅผ ์ฃผ๋ก ์ฌ์ฉ (openpyxl, xlrd)
* ์ค์น (pandas, openpyxl, xlrd)
- pip install xlrd
- pip install openpyxl
- pip install pandas
* ๋ถ๋ฌ์ค๊ธฐ
import pandas as pd
xlsx = pd.read_excel('./resource/sample.xlsx')
pandas๋ฅผ importํ๊ณ , read_excel์ ์ด์ฉํ์ฌ ์์ ํ์ผ์ ๋ถ๋ฌ์ ์ค๋ค.
* ์์ ๋ฐ์ดํฐ ํ์ธ
print(xlsx.head())
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
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์์ 5๊ฐ ๋ฐ์ดํฐ๊ฐ ๋์จ๋ค.
* ํ์ ๋ฐ์ดํฐ ํ์ธ
print(xlsx.tail())
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
ํ์ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๋ค.
* ๋ฐ์ดํฐ์ ๊ตฌ์กฐ
print(xlsx.shape) # ํ, ์ด
(20, 7)
shape๋ฅผ ์ด์ฉํ์ฌ ํ๊ณผ ์ด์ ํฌ๊ธฐ๊ฐ ์ผ๋ง๋ ๋๋์ง ํ์ธํด ๋ณผ ์ ์๋ค.
* ์์ or CSV ๋ค์ ์ฐ๊ธฐ
xlsx.to_excel('./resource/result.xlsx', index=False)
xlsx.to_csv('./resource/result.csv', index=False)
์ด๋ ๊ฒ to_excel๊ณผ to_csv๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ์์ฑํ ์๋ ์๋ค.