python

[python] 엑셀 데이터 추출 및 메모장 데이터 가져오기

vhxpffltm 2020. 4. 30. 21:43

엑셀 데이터 추출

 

엑셀 데이터를 정리할 일이 생겨 데이터가 많아 파이썬 프로그래밍으로 해결할 일이 있었다.

 

엑셀 데이터에는 아래와 같다. 데이터는 웹 사이트의 공개된 샘플 자료이다

 

 

여기서 지역에 대한 데이터가 필요한데 이 지역데이터만 뽑기 위해서 프로그램을 적용해보자.

 

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
from openpyxl import load_workbook
import re
import sys
 
 
def cleanText(readData):
    p = re.compile("[^0-9]")
    #print(p)
    #print("".join(p.findall(readData)))
    return "".join(p.findall(readData))
 
 
def Excel():
    wb = load_workbook('예제모음.xlsx')
 
    # 현재 Active Sheet 얻기
    ws = wb.active
    #ws = wb.get_sheet_by_name("Sheet1") 엑셀에서 sheet를 선택
    chk="0123456789"
    pre = ws.rows
    #print(pre)
    #for r in ws.rows:
    #    print(r)
    for r in ws.rows: # 엑셀에서 각 행과 열로 순회하기 위함
        ty = r[0].value # 첫째 열의 값 : 그룹
        data = r[2].value # 둘째 열의 값 : 주소
        #if pre != ty:
            #pre =ty
            #print("그룹 : ",ty)
            #print('----------------------------------',end='\n')
        print(data)
        #print(r)
 
 
if __name__ == "__main__":
    Excel()
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

우선 패키지 설치가 필요하다. sys 모듈로 메모장 파일로 저장할 것이고, re는 정규화를 위한 모듈이다. 우리는 '지역' 셀의 데이터를 얻을것이며 주소데이터에서 한글만을 추출할것이다. 그래서 뒤의 숫자를 제거하는 작업을 할 것인데 이것을 정규화로 해결할 것이다.

 

패키지에서 openpyxl 패키지로 엑셀 파일을 처리할 수 있다. 이 패키지는 따로 설치하면 되며 필자는 파이참 프로젝트를 사용해서 해당 프로젝트에 패키지를 설치하였다 코드의 각 내용은 주석과 같다. 

 

이를 출력하면 아래와 같다.

 

 

우리가 원하는 지역 데이터를 모두 가져왔다. 코드에서 주석으로 처리한 sys.stdout = open('output.txt','w') 으로 텍스트 파일로 저장할 수 있다. 그런데 현재 여기서는 마지막에 숫자데이터가 함께 추출되었다. 이를 제거하기 위해 정규화로 숫자를 제거할 수 있다.

 

data 변수에 cleanText() 함수를 호출하여 적용하면 정규화로 한글만 된 값을 추출할 수 있다. 

 

메모장 데이터 

 

근데 이렇게 얻은 메모장 텍스트중 중복된 데이터가 있었다. 갯수를 계산해야 하는데 중복된 데이터는 하나로 처리해야 했다. 위의 엑셀 데이터에서 이름을 임의로 바꾸어 이름 데이터를 output.txt로 저장한 결과이다.

 

 

같은 이름의 중복된 이름이 보인다. 이 메모장 파일을 가지고 이를 제거하여 새로 메모장 파일을 만들어 본다. 물론 이 작업을 엑셀에서 혹은 위에서 미리 할 수도 있지만 여기서는 메모장 파일 실습을 위한거니 이렇게 진행한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def Memo():
    w = open('output_new.txt''w',encoding='UTF8')
    r = open('output111.txt''r',encoding='UTF8')
 
    # 파일에서 읽은 라인들을 리스트로 읽어들임
    lines = r.readlines()
 
    lines = list(set(lines))
    lines.sort()
    # 정렬,중복제거한 리스트 파일 쓰기
    for line in lines:
        w.write(line)
    w.close()
    r.close()
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

위 코드를 실행하면 중복이 제거된다. set 자료구조를 응용한것이며 텍스트 파일을 각 라인별로 읽어들인 후, 데이터를 set에 삽입한다. 이후 정렬하면 중복된 데이터가 사라지고 데이터를 정렬된 상태로 새로운 메모장 파일로 저장한다.

 

utf-8 인코딩으로 저장하지 않은 파일을 open() 함수로 열면 에러가 발생하므로 'encodeing=UTF8' 로 지정해준다.

 

 

Refernce

http://hleecaster.com/excel-crawling-with-python/