본문 바로가기
연구/소원 - 팀장

파이썬으로 엑셀 자료를 딕셔너리로 저장하기

by I am wish 2020. 10. 9.
반응형

파이썬에서 엑셀 자료를 읽을 수 있는 라이브러리는 2개로 pandas와 openpyxl이 있다.

내가 가지고 있는 엑셀 파일은 xls로 Excel1997인가? 쨌든 되게 오래된 버전의 엑셀임.

openpyxl이 엑셀파일을 다루기엔 더 편해보이는데 아쉽게도 xls는 지원하지 않는다.

나도 설치했다가 지원안해준다길래 그냥 판다스로 했다.

 

일단 내가 엑셀 파일에서 필요한 건 B와 C 행이다. 이들은 딕셔너리 형태로 만들거다. 

프로그램을 시작할때마자 이짓을 하는건 너무 비효율적이기 때문에 

str 변수에 딕셔너리 모양으로 넣고, text파일엔 넣은 다음, text를 py파일로 복붙해서 만들거다.

귀찮아서 대충 했다. 어차피 모양만 잡고 버릴 코드기에.

 

import pandas as pd

#엑셀 읽기
a1 = pd.read_excel('a1.xls', header=1)
#읽은 엑셀을 리스트로변환
alist = a1.values.tolist()

#리스트에서 한 행씩 읽어서 str변수에 원하는 형태로 삽입
tupletext = "sign = {"
for i in range(len(alist)):
    tupletext += "\""+str(alist[i][2])+"\" : " + str(alist[i][1]) + ","
    if i%7 == 0 :tupletext += "\n"

tupletext += "}"

#text 파일 만들기
f= open("sign1.txt","w",-1,encoding="utf-8")
#만든 str을 text에 넣기
f.write(tupletext)
#파일 닫기
f.close()
print(tupletext)

tupletext는 위처럼 예쁘게 나온다. 딕셔너리 만드는건데 튜플로 착각해서 변수명을 잘못지었다ㅎ

 

if i%7 == 0 : tupletext += "\n" 이 함수는 좀 길어지면 다음줄로 넘기기 위하여 썼다.

원래는 없었는데 내가 읽는 엑셀파일의 행이 12000줄이라서 한줄로 str을 만들면 어마어마하게 길다.

메모장 켜서 볼땐 문제가 없었는데 py파일로 복붙하니까 파이참이 렉걸려서 엔터쳐서 다시 넣었다.

 

print(sign["이론"])

 

테스트겸 key값으로 value 잘 나오나 해봤는데

잘 나온당

    #단어주소 들가서 영상주소 크롤링해서 리턴
    def crawling(self):
        word = "지금"
        if word in sign.find_num.keys():
            num = sign.find_num[word]
            html = urlopen("http://sldict.korean.go.kr/front/sign/signContentsView.do?origin_no={}".format(num))

            soup = BeautifulSoup(html, "html.parser")
            video_url = str(soup.find(id="preview").get("value"))
            video_url = video_url[:92] + "700X466.mp4"
            return video_url
        else :
            print("일치하는 단어 없음")
            return None

 

 

만들어 두었던 메인 코드에서도 잘 합쳐지나 했는데 수화 영상도 잘 나오고 지연도 거의 없다!

반응형