CSV, HTML, XML, JSON 데이터에 대해 알아보겠다.
1. CSV : comma separate values
- 쉼표로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식!
- 탭으로 구분 = TSV, 빈칸으로 구분 = SSV 등등이 있는데, 통칭하여 CSV로 부른다!
- 엑셀에서 "다른 이름으로 저장" 기능을 활용하여 만들 수 있다.
파이썬으로 CSV 파일 읽기/쓰기
-> 앞서 포스팅한 file handing에서 소개한 모듈, 함수 등을 이용하면 된다!
CSV는 쉼표로 구분된 파일이므로 한 줄씩 읽어올 때 유의할 점이 있다.
쉼표를 포함하여 읽어오므로 이를 없애주는 전처리 과정이 필요하다!
-> 직접 코드로 할 수도 있지만, 파이썬에서는 CSV 파일 처리를 위한 CSV 객체를 제공해준다.
import csv
reader = csv.reader(f, delimiter=',', quotechar='"', quoting = csv.QUOTE_ALL)
# f는 파일을 의미한다.
quotechar에 대해 조금 더 설명하자면, 이름이 "길동, 홍" 과 같이 저장되어있을 경우,
단순히 쉼표를 기준으로만 자르면 이름이 잘리므로, quotechar를 사용해주면 지정한 신호 문자로 감싸진 문자열을 하나의 필드로 인식하게 할 수 있다.
그리고 항상 encoding에 대해 유의하자! 윈도우는 cp949, 맥이나 리눅스는 utf8
IDE마다 다를 수도 있다.
2. html : 웹 상의 정보를 구조적으로 표한하기 위한 마크업 언어
- 요소 표시를 위해 tag를 사용한다. tag는 꺾쇠 괄호안에 둘려 쌓여있다.
- HTML은 트리 구조를 가지는데, 웹 수업 때 배웠던 DOM을 의미하는 것 같다.
웹은 정보의 보고이다. 수많은 데이터들이 웹을 통해 공유된다. 또한 HTML도 일종의 프로그램이므로, 생성 규칙이 있다
-> 규칙을 분석하여 데이터의 추출이 가능하다!
-> 추출된 데이터를 바탕으로 다양한 분석 역시 가능하다.
string을 이용하거나, 정규표현식, beatifulsoup 등 여러 분석 방법이 존재한다. 이번 포스팅에서는 정규표현식에 대해서만 다루겠다!
정규표현식(regex) : 문자열 패턴을 정의하는 문자 표현 공식
- 형식이 있는 문자열을 해결할 때 유용하다.
- 수많은 문법이 존재하여 다 포스팅할 수 없다...
정규식 기본 문법
1. [] : []안에 있는 문자들과 매치
ex) [abc] <- abc를 찾아준다.
2. - : 범위 지정 가능
ex) [0-9] = 0부터 9까지의 숫자
3. 메타 랭귀지
. : 리눅스에서 *와 유사한 기능(\n는 제외!)
* : 0번 또는 무한번 반복 가능
ex) ab* 는 a, ab, abb, abbb...
+ : 1번 또는 무한번 반복
ex) ab+ 는 ab, abb, abbb...
? : 반복 가능한 횟수가 1번
^ : not
| : or
= 프로그래밍 언어와 컴파일러 시간에 배웠던 것들이 조금씩 기억난다..ㅎㅎ
파이썬에서의 정규표현식
import re
import urllib.request
url = "https://bit.ly/3rxQFS4
html = urllib.request.urlopen(url)
html_contents = str(html.read())
id_result = re.findall(r"([A-Za-z0-9]+\*\*\*)", html_contents)
for res int id_results:
print(res)
위 연습코드는 특정 url에서 유저의 ID만 추출하는 코드이다.
함수 : search (한개만 찾기), findall (전체 찾기) 등이 있다.
추출된 패턴은 tuple로 반환된다!
html에서 데이터를 추출할 땐 원하는 정보가 들어있는 곳의 태그를 확인하자! 그리고 정규표현식을 활용하여 내용을 가져올 수 있다.
html내에서 동일 태그가 여러 개일 경우, 튜플을 확인하고 몇번째 인덱스의 튜플을 사용할건지 선택하여 따로 저장해주면 된다!
3. XML : 데어터의 구조와 의미를 설명하는 태그를 사용하여 표시하는 마크업 언어
- tag 사이에 값이 표시되고, 구조적인 정보를 표현할 수 있다. html과 문법이 비슷하다
- 스키마와 DTD 등 정보에 대한 정보(=메타정보)가 표현되며 용도에 따라 형태 변경 가능하다.
- 다른 머신들(ex. PC <-> 모바일)간 정보를 주고받기 매우 유용하다
- html과 마찬가지로 트리 구조를 가진다.
-> 정규표현식으로 파싱이 가능하지만, beautifulsoup을 주로 사용한다!
속도는 상대적으로 느리지만 편하다는 장점이 있다.
beautifulsoup
1. lxml과 beautifulsoup 설치를 우선 해주자
conda install lxml
conda install -c anaconda beatifulsoup
하고,
python실행
form bs4 import beautifulSoup 이 잘되는지 확인!
2. 객체 생성
변수명 = BeautifulSoup(xml,parser)인데 주로 parser는 lxml을 사용한다
4. JSON : 자바 스크립트의 데이터 객체 표현 방식
- 간결
- 데이터 용량이 적고, code로 전환이 쉬움
- xml의 대체제로 활용되고 있다.
key : value 쌍으로 데이터를 표시한다!
파이썬에서의 json
json 모듈을 활용한다
import json
거의 모든 웹에서는 json을 이용하여 정보를 교환한다.
파이썬에서의 dictionary type과 거의 동일하므로, 동일하게 처리해주면 된다!
'파이썬' 카테고리의 다른 글
백준 파이썬 pypy3로 제출 시 메모리 초과 뜨는 이유/해결 (0) | 2023.01.27 |
---|---|
[파이썬] Vscode에서 코딩테스트 환경 설정 (0) | 2022.10.04 |
파이썬 - File / Exception / Log Handling (0) | 2022.09.27 |
파이썬 - 모듈과 패키지 (0) | 2022.09.27 |
파이썬 - OOP (0) | 2022.09.27 |