(Python 5-2๊ฐ) Python data handling
210804
Comma Separate Value
CSV, ํ๋๋ฅผ ์ผํ(,)๋ก ๊ตฌ๋ถํ ํ ์คํธ ํ์ผ
์์ ์์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋จ์ ์๊ด์์ด ์ฐ๊ธฐ ์ํ ๋ฐ์ดํฐ ํ์
ํญ(TSV), ๋น์นธ(SSV) ๋ฑ์ผ๋ก ๊ตฌ๋ถํด์ ๋ง๋ค๊ธฐ๋ ํจ
ํต์นญํ์ฌ character-separated values (CSV) ๋ถ๋ฆ
์์ ์์๋ โ๋ค๋ฆ ์ด๋ฆ ์ ์ฅโ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
csv ํ์ผ ์ฝ๊ธฐ
line_counter = 0 #ํ์ผ์ ์ด ์ค์๋ฅผ ์ธ๋ ๋ณ์
data_header = [] #data์ ํ๋๊ฐ์ ์ ์ฅํ๋ list
customer_list = [] #cutomer ๊ฐ๋ณ List๋ฅผ ์ ์ฅํ๋ List
with open ("customers.csv") as customer_data: #customer.csv ํ์ผ์ customer_data ๊ฐ์ฒด์ ์ ์ฅ
while True:
data = customer_data.readline() #customer.csv์ ํ์ค์ฉ data ๋ณ์์ ์ ์ฅ
if not data: break #๋ฐ์ดํฐ๊ฐ ์์ ๋, Loop ์ข
๋ฃ
if line_counter==0: #์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ์ ํ๋
data_header = data.split(",") #๋ฐ์ดํฐ์ ํ๋๋ data_header List์ ์ ์ฅ, ๋ฐ์ดํฐ ์ ์ฅ์ โ,โ๋ก ๋ถ๋ฆฌ
else:
customer_list.append(data.split(",")) #์ผ๋ฐ ๋ฐ์ดํฐ๋ customer_list ๊ฐ์ฒด์ ์ ์ฅ, ๋ฐ์ดํฐ ์ ์ฅ์ โ,โ๋ก ๋ถ๋ฆฌ
line_counter += 1
print("Header :\t", data_header) #๋ฐ์ดํฐ ํ๋ ๊ฐ ์ถ๋ ฅ
for i in range(0,10): #๋ฐ์ดํฐ ์ถ๋ ฅ (์ํ 10๊ฐ๋ง)
print ("Data",i,":\t\t",customer_list[i])
print (len(customer_list)) #์ ์ฒด ๋ฐ์ดํฐ ํฌ๊ธฐ ์ถ๋ ฅ
์ ์ ์ฌํญ
Text ํ์ผ ํํ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ฌธ์ฅ ๋ด์ ๋ค์ด๊ฐ ์๋โ,โ ๋ฑ์ ๋ํด ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ํ์
ํ์ด์ฌ์์๋ ๊ฐ๋จํCSVํ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด csv ๊ฐ์ฒด๋ฅผ์ ๊ณตํจ
์์ ๋ฐ์ดํฐ: korea_foot_traffic_data.csv (from http://www.data.go.kr)
์์ ๋ฐ์ดํฐ๋ ๊ตญ๋ด ์ฃผ์ ์๊ถ์ ์ ๋์ธ๊ตฌ ํํฉ ์ ๋ณด -ํ๊ธ๋ก ๋์ด ์์ด ํ๊ธ ์ฒ๋ฆฌ๊ฐ ํ์
CSV ๊ฐ์ฒด ํ์ฉ
import csv
reader = csv.reader(f,
delimiter=',', quotechar='"',
quoting=csv.QUOTE_ALL)
delimiter : ๊ธ์๋ฅผ ๋๋๋ ๊ธฐ์ค, ๊ธฐ๋ณธ๊ฐ์ ,
lineterminator : ์ค ๋ฐ๊ฟ ๊ธฐ์ค, ๊ธฐ๋ณธ๊ฐ์ \r\n
quotechar : ๋ฌธ์์ด์ ๋๋ฌ์ธ๋ ์ ํธ ๋ฌธ์, ๊ธฐ๋ณธ๊ฐ์ "
quoting : ๋ฐ์ดํฐ ๋๋๋ ๊ธฐ์ค์ด quotechar์ ์ํด ๋๋ฌ์ธ์ธ ๋ ๋ฒจ, ๊ธฐ๋ณธ๊ฐ์ QUOTE_MINIMAL
Web
World Wide Web(WWW), ์ค์ฌ์ ์น์ด๋ผ๊ณ ๋ถ๋ฆ
์ฐ๋ฆฌ๊ฐ ๋ ์ฐ๋ ์ธํฐ๋ท ๊ณต๊ฐ์ ์ ์ ๋ช ์นญ
ํ ๋ฒ๋์ค๋ฆฌ์ ์ํด 1989๋ ์ฒ์ ์ ์๋์์ผ๋ฉฐ, ์๋๋ ๋ฌผ๋ฆฌํ์๋ค๊ฐ ์ ๋ณด ๊ตํ์ ์ํด ์ฌ์ฉ๋จ
๋ฐ์ดํฐ ์ก์์ ์ ์ํ HTTP ํ๋กํ ์ฝ ์ฌ์ฉ, ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด HTML ํ์์ ์ฌ์ฉ
๋์ ๊ณผ์
์์ฒญ : ์น์ฃผ์, Form, Header ๋ฑ
์ฒ๋ฆฌ : Database ์ฒ๋ฆฌ ๋ฑ ์์ฒญ ๋์
์๋ต : HTML, XML ๋ฑ์ผ๋ก ๊ฒฐ๊ณผ ๋ฐํ
๋ ๋๋ง : HTML, XML ํ์
HTML
Hyper Text Markup Language
์น ์์ ์ ๋ณด๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ํํํ๊ธฐ ์ํ ์ธ์ด
์ ๋ชฉ, ๋จ๋ฝ, ๋งํฌ ๋ฑ ์์ ํ์๋ฅผ ์ํด Tag๋ฅผ ์ฌ์ฉ
๋ชจ๋ ์์๋ค์ ๊บพ์ ๊ดํธ ์์ ๋๋ฌ ์์ฌ ์์
Hello, World ๏ผ์ ๋ชฉ ์์, ๊ฐ์ Hello, World
๋ชจ๋ HTML์ ํธ๋ฆฌ ๋ชจ์์ ํฌํจ๊ด๊ณ๋ฅผ ๊ฐ์ง
์ผ๋ฐ์ ์ผ๋ก ์น ํ์ด์ง์ HTML ์์คํ์ผ์
์ปดํจํฐ๊ฐ ๋ค์ด๋ก๋ ๋ฐ์ ํ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ํด์/ํ์
์ ๊ท์
์ ๊ท ํํ์, regexp ๋๋ regex ๋ฑ์ผ๋ก ๋ถ๋ฆผ
๋ณต์กํ ๋ฌธ์์ด ํจํด์ ์ ์ํ๋ ๋ฌธ์ ํํ ๊ณต์
ํน์ ํ ๊ท์น์ ๊ฐ์ง ๋ฌธ์์ด์ ์งํฉ์ ์ถ์ถ
010-0000-0000 ^\d{3}-\d{4}-\d{4}$
203.252.101.40 ^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$
์ฐ์ตํ๊ธฐ
1)์ ๊ท์์ฐ์ต์ฅ(http://www.regexr.com/) ์ผ๋ก์ด๋
2)ํ ์คํธํ๊ณ ์ถ์๋ฌธ์๋ฅผText ๋์์ฝ์
3)์ ๊ท์์์ฌ์ฉํด์์ฐพ์๋ณด๊ธฐ
XML
๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ค๋ช ํ๋ TAG(MarkUp)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ๋ ์ธ์ด
TAG์ TAG์ฌ์ด์ ๊ฐ์ด ํ์๋๊ณ , ๊ตฌ์กฐ์ ์ธ ์ ๋ณด๋ฅผ ํํํ ์ ์์
HTML๊ณผ ๋ฌธ๋ฒ์ด ๋น์ท, ๋ํ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์
XML๋ HTML๊ณผ ๊ฐ์ด ๊ตฌ์กฐ์ markup ์ธ์ด
์ ๊ทํํ์์ผ๋ก Parsing์ด ๊ฐ๋ฅํจ
๊ทธ๋ฌ๋ ์ข ๋ ์์ฌ์ด ๋๊ตฌ๋ค์ด ๊ฐ๋ฐ๋์ด ์์
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ parser์ธ beautifulsoup์ผ๋ก ํ์ฑ
์์
<?xml version="1.0"?>
<๊ณ ์์ด>
<์ด๋ฆ>๋๋น</์ด๋ฆ>
<ํ์ข
>์ด</ํ์ข
>
<๋์ด>6</๋์ด>
<์ค์ฑํ>์</์ค์ฑํ>
<๋ฐํฑ ์ ๊ฑฐ>์๋์</๋ฐํฑ ์ ๊ฑฐ>
<๋ฑ๋ก ๋ฒํธ>Izz138bod</๋ฑ๋ก ๋ฒํธ>
<์์ ์>์ด๊ฐ์ฃผ</์์ ์>
</๊ณ ์์ด>
BeautifulSoup
HTML, XML๋ฑ Markup ์ธ์ด Scraping์ ์ํ ๋ํ์ ์ธ ๋๊ตฌ
lxml ๊ณผ html5lib ๊ณผ ๊ฐ์ Parser๋ฅผ ์ฌ์ฉํจ
์๋๋ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ ๊ฐํธํ ์ฌ์ฉํ ์ ์์
# ๋ชจ๋ ํธ์ถ
from bs4 import BeautifulSoup
# ๊ฐ์ฒด ์์ฑ
soup = BeautifulSoup(books_xml, "lxml")
# Tag ์ฐพ๋ ํจ์ find_all ์์ฑ
soup.find_all("author")
JSON
JavaScript Object Notation
์๋ ์น ์ธ์ด์ธ Java Script์ ๋ฐ์ดํฐ ๊ฐ์ฒด ํํ ๋ฐฉ์
๊ฐ๊ฒฐ์ฑ์ผ๋ก ๊ธฐ๊ณ/์ธ๊ฐ์ด ๋ชจ๋ ์ดํดํ๊ธฐ ํธํจ
๋ฐ์ดํฐ ์ฉ๋์ด ์ ๊ณ , Code๋ก์ ์ ํ์ด ์ฌ์
์ด๋ก ์ธํด XML์ ๋์ฒด์ ๋ก ๋ง์ด ํ์ฉ๋๊ณ ์์
Python์ Dict Type๊ณผ ์ ์ฌ, key:value ์์ผ๋ก ๋ฐ์ดํฐ ํ์
json ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ ์ฝ๊ฒ ํ์ฑ ๋ฐ ์ ์ฅ ๊ฐ๋ฅ
๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ฝ๊ธฐ๋ dict type๊ณผ ์ํธ ํธํ ๊ฐ๋ฅ
์น์์ ์ ๊ณตํ๋ API๋ ๋๋ถ๋ถ ์ ๋ณด ๊ตํ ์ JSON ํ์ฉ
ํ์ด์ค๋ถ, ํธ์ํฐ, Github ๋ฑ ๊ฑฐ์ ๋ชจ๋ ์ฌ์ดํธ
๊ฐ ์ฌ์ดํธ ๋ง๋ค Developer API์ ํ์ฉ๋ฒ์ ์ฐพ์ ์ฌ์ฉ
XML๊ณผ JSON ๋น๊ต
<?xml version="1.0" encoding="UTF8" ?>
<employees>
<name>Shyam</name>
<email>shyamjaiswal@gmail.com</e
mail> </employees>
<employees>
<name>Bob</name>
<email>bob32@gmail.com</email>
</employees> <employees>
<name>Jai</name>
<email>jai87@gmail.com</email>
</employees>
JSON
{"employees":[
{"name":"Shyam",
"email":"shyamjaiswal@gmail.com"},
{"name":"Bob",
"email":"bob32@gmail.com"},
{"name":"Jai",
"email":"jai87@gmail.com"} ]
}
JSON ๋ฐ์ดํฐ ์ฝ๊ธฐ
import json
with open("json_example.json", "r", encoding="utf8") as f:
contents = f.read()
json_data = json.loads(contents)
print(json_data["employees"])
JSON ๋ฐ์ดํฐ ์ฐ๊ธฐ
import json
dict_data = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
with open("data.json", "w") as f:
json.dump(dict_data, f)
Last updated
Was this helpful?