Python에서 xml을 파싱하여 처리하는 간단한 방법을 소개합니다. 


각종 사이트에서 전달되는 RSS(Rich Site Summary) 컨텐츠를 가지고 쉽게 재가공 하여 사용할 수 있도록 도와주는 외부 모듈입니다.

최신정보등을 자동 수집할 수 있다는 장점이 있다.( ex) 기상정보, 뉴스정보 등)


RSS에 대해 더 자세히 알고 싶다면 위키백과를 참고하세요 : https://ko.wikipedia.org/wiki/RSS


Pypi : https://pypi.python.org/pypi/beautifulsoup4/4.4.1

BeautifulSoup 공식사이트 : http://www.crummy.com/software/BeautifulSoup/bs4/doc/


Root부터 찾을 필요없이, 직접 명시하는 TAG에 접근이 가능한 것이 무척 편합니다.

xml을 직접 open 하는 것과, 기상청 RSS 를 가져와서 처리하는 예제 두개를 아래에 올립니다.

====================================================================================


	
		
			Track1
			3:15
		

		
			Track2
			2:22
		

		
			Track3
			5:33
		
		
		
			Track4
			4:33
		
	




#Example1

from bs4 import BeautifulSoup

fp = open("song.xml","r")
soup = BeautifulSoup(fp, "html.parser")

# findAll로 해당되는 TAG를 검색
for songElement in soup.findAll('song'):
    # 해당 TAG안의 Attribute(속성) 값을 가져올때는 아래와 같이 사용
    print(songElement['singer'],songElement['album'])
    
    # Tag 아래에 있는 다른 Tag를 가져올경우 아래와 같이 사용
    print(songElement.title.string,songElement.length.string)
    
 


<결과>
singer1 album1
Track1 3:15
singer2 album2
Track2 2:22
singer3 album3
Track3 5:33
singer4 album4
Track4 4:33

====================================================================================

#Example2

from bs4 import BeautifulSoup
import urllib.request as MyURL

# 서울/경기도 RSS
japi = 'http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109' # 서울/경기

response = MyURL.urlopen(japi)
weather = BeautifulSoup(response, "html.parser")

for location in weather.findAll('location'): # location 까지 알아서 찾음.
        
    print(location.city.string)
    print("="*20)

    for data in location.findAll('data'):
        # xml에서 태그명은 대소문자 구분을 하지 않음
        print("시간:",data.tmef.string)      
        print("날씨:",data.wf.string)
        print("최저:",data.tmn.string)
        print("최고:",data.tmx.string)
        print("신뢰도:",data.reliability.string)
        print("")


#Example3


	
		서울ㆍ인천ㆍ경기도
		서울
		
			A02
			2015-12-05 00:00
			구름많음
			-1
			5
			보통
		
		
			A02
			2015-12-05 12:00
			구름조금
			-1
			5
			보통
		
		
			A02
			2015-12-06 00:00
			구름많음
			-2
			5
			보통
		


결과

서울

====================

시간: 2015-12-05 00:00

날씨: 구름많음

최저: -1

최고: 5

신뢰도: 보통


시간: 2015-12-05 12:00

날씨: 구름조금

최저: -1

최고: 5

신뢰도: 보통

....


Posted by HHHimchan
,

http://www.itworld.co.kr/slideshow/89928

Posted by HHHimchan
,

파이선의 좋은점은 여기저기에 많은 3rd party 모듈이 있다는 것이다.

다양한 3rd party 모듈을 이용하면 많은 프로그래밍 분야에서 사용이 가능하다


xlsxwriter 와 openpyxl 을 파이선을 다루는 모듈을 사용할 때 많이 사용한다고 합니다.

다만 xlsxwriter는 기존의 파일을 open 하여 수정하는 것이 불가하다고 하네요.(이점 참고하세요)


엑셀을 다루는 여러 3rd party 모듈이 있으나 여기 글에서는 openpyxl 이라는 모듈을 다루어 보도록 하겠습니다.


파이선 3.4 로 진행했습니다


<PyPi : 파이선에서 운영하는 다양한 Package 릴리즈 페이지>

 http://pypi.python.org/


<openpyxl - download>

https://pypi.python.org/pypi/openpyxl/2.3.1





<openpyxl - document>

http://pythonhosted.org/openpyxl/

document를 잘 보고 예제를 따라하면 내것으로 만들기가 좋습니다

2.3.1 버전이 올라와 있으니 해당 버전으로 다운로드를 합니다.

단지 영어라는 막연한 두려움이 있지만 예제만 따라해 보셔도 대충 감이 온다는 점.



[openpyxl-2.3.1.tar.gz ] 파일을 다운로드

압축을 해제하고 풀린 경로에 가서

$ python setup.py install 하여 설치합니다



from openpyxl import Workbook from openpyxl.styles import Font, Side, Border # Workbook 생성 wb = Workbook() # Workbook을 생성하면 적어도 하나의 워크시트를 생성한다. ws1 = wb.active ws1.title = "Example1" # 1. 시트의 행렬의 번호를 입력하여 Text 입력이 가능 ws1['A1'] = "A1_Test Text" # 2-1 시트에서 셀을 변수로 만들고 c = ws1.cell('A2') # 2-2 아래처럼 각 셀에 대해 value 입력, font 설정 등을 할 수 있다. c.value = "A2 zone" c.font = Font(name='Arial', size=14) c.border = Border(left=Side(border_style="thin", color='FF000000'),right=Side(border_style="thin",color='FF000000'),top=Side(border_style="thin",color='FF000000'), bottom=Side(border_style="thin", color='FF000000')) # 3. row, column 을 지정하여 셀을 변수로 리턴할 수 있다. d = ws1.cell(row=2,column=2) d.value = "(2,2) text" # 같은 workbook에 새로운 시트를 추가할 때 ws2=wb.create_sheet() # 번호를 지정하면 아래 번호에 sheet를 추가한다. #ws2=wb.create_sheet(1) # 새로운 시트의 이름은 Sheet2 라고 하자 ws2.title="Sheet2" # 저장은 간단합니다. wb.save('example.xlsx')




간단한 예제였지만 Document 들을 보고 금방 습득할 수 있도록 간단하게 사용이 가능합니다.



어떠한 양식이 있는 text 를 엑셀화 시키고 싶다면 실사용 예로 아래와 같이 방향성을 가져도 될것같습니다.

시간이 난다면 간단한 예제로 다음시간에 한번 다뤄 보도록 할께요


[1] text 파일이 생성됨(가져오거나) (공백문자로 구분되거나 스트링 처리가 가능한 양식)

[2] 해당 text 파일을 읽어옴

[3] 라인단위나, 지정한 단위별로 list화 시킨 후에

[4] 리스트를 읽어오면서 엑셀화 시킴(loop 구문을 이용하여 row,column 변경 처리를 함)

    서식 폰트 내용 등등등등

[5] 저장 ( 현재시간 등으로 저장 )

[6] 읽어 들인 text 파일을 renaming하여 하위폴더에 포관



이렇게 코드를 짠 후 python이 설치되지 않은 컴퓨터에서도 실행될 수 있도록 배포를 하고 싶으면 py2exe 와 같은 3rd party 모듈을 사용하면 됩니다.

허나 지금 py2exe 에서 openpypl이 잘 include 되지 않는 이슈가 있긴한데, 이를 임시로 피해가는 방법도 다음 시간에 다뤄보도록 할께요.

Posted by HHHimchan
,
E-Clipse로 Python 개발하기 환경세팅

 

python을 설치하면 자체 command idle과 편집기를 제공하는데요 자동완성이나 여러기능들이 좀 부족합니다

따라서 대중툴인 이클립스를 이용하여 파이선 언어로 개발할 수 있는 방법을 공유합니다^^


https://www.python.org/





일단 파이선 부터 설치 합니다 (저는 python 3 버전을 설치합니다)




예전버전에는 설치하게 되면 C:\python3 이런경로에 설치가 되었었는데

최근에 변경되었습니다. 아래 경로는 숨기기 처리가 되었어요 참고하세용~

C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\



자 다음은 이클립스를 설치해볼까요

http://www.eclipse.org/downloads/


Eclipse IDE for jave Developers 로 다운받습니다

사용하시는 운영체제 32/64 확인하시어서 다운받으시면 됩니다.

안맞으면 실행시 에러발생




다운받은 파일을 압축해제 후 eclipse.exe 파일을 실행



맞는 os 타입으로 설정했는데 실행이 안된다면


java jdk가 설치되지 않아서 그런것 같습니다

http://www.oracle.com/technetwork/java/javase/downloads/index.html


에서 JDK 를 설치해 줍니다.



실행하면 현재 최신은 Mars 버전인가봅니다



처음 실행하면 나타나는 프로젝트 작업 Path를 설정합니다

취향것 경로를 설정해주세요


실행은 했지만 아직은 python을 개발할 수 있는 플러그인이 설치되지 않았습니다


쉬운 플러그인 설치를 위해서 Help >> Eclipse Markerplace




Find 항목에 pyDev 를 타이핑하여 검색 후 

pyDev 를 Install 합니다



Install 을 하면 아래와 같이 Confirm 확인 창에 뜨고

Confirm >> I accept the terms of the license agreemnets 


약관에 동의한다고 한 후 Finish 버튼을 누르면 설치



Finish 버튼을 누르면 한창동안 설치작업을 하다가

아래와 같은 인증서 클릭같은게 나옵니다

체크하고 ok~!





설치가 완료되는 이클립스를 재실행하겠냐는 메세지가 뜹니다. Yes!!


File >> New >> Other 를 클릭


좌(설치전) 우(설치후)

PyDev라는 선택항목이 추가되었습니다.




Python 신규 project 생성

PyDev Project



Next 를 하면


Project name을 입력

Grammer Version을 입력

(아까 파이선3.5를 설치했으므로 Grammer Version 3을 선택)


하지만 위쪽에 Project interpreter not specified 라고 경고 메세지가 나옵니다

이를 해결하기 위해


아래 Please configure an interpreter before proceeding 을 클릭


클릭하면 아래와 같은 창이 뜨고

 Quick Auto-Config 선택

파이선 설치경로 및 기본 라이브러리 경로를 잡아주는 것으로 보입니다.



Quick Audo-config 를 하면 

Intepreter 메뉴가 추가되고 

python으로 선택해 줍니다.



모두 세팅 되었으면 Finish


프로젝트는 생성되었고 실제 .py 파일인 파이선 파일을 생성하려면

프로젝트 >> 오른쪽 마우스 >> NEw >> PyDev Module





Package설정이 필요하면 입력/ Name은 모듈의 이름( {Name}.py ) 로 생성됩니다.


아래와 같이 Template 설정하는 것도 나오는데 전 Empty



아주 기본 예제로 hello world 출력 구문 작성


이클립스에서의 compile 및 실행은 Ctrl + F11 이지요


py 파일을 어떤 방법으로 실행할지 물어보네요

Python Run


Console 창에 아래와 같이 실행 결과가 출력됩니다.



Eclipse 로 하면 Ctrl + Space 로 예약된 함수등을 바로 사용하기 편하고

프로젝트 단위로 파일 관리가 용이합니다.


이상 이클립스로 파이선 개발환경 설정하기였습니다^^

Posted by HHHimchan
,