본문 바로가기

python?

파이썬으로 엑셀 다루기(파일 읽기, 쓰기)

파이썬으로 네이버 검색어 순위 크롤링이 끝나고

다음 과제를 내 주었다.

마지막 카톡에서 보다시피 룰이 복잡하다고 하였다.

일단 겁이났다.

룰을 보니

...더보기

프로그램은 다음 기능을 꼭 포함해야 함.
* 프로그램 목적 : 검색을 통해 기준에 맞는 행들만 따로 뽑아서 저장.

1. 객관식으로 어느 컬럼(열)의 데이터를 검색할 건지 물어보고 입력값에 따라 해당 열의 데이터를 검색할 것.

2. 검색한 정보가 해당 열에 있으면 해당 정보가 있는 행을 추출하여 파일로 저장할 것(여러 행이 검색 된다면 여러행을 저장해야함.)

3. 검색할 때, 정규식을 사용할 필요는 없음. 검색한 데이터랑 100% 일치할 때만 출력하도록 하면 된다는 뜻임

4. 새로 저장되는 파일 이름을 입력받도록 만들 것.

5. 새로 저장되는 파일의 확장자는 반드시 xlsx 여야하며, 기본으로 제공해준 파일도 수정해서는 안됨

6. 새로 저장되는 파일에서는 B열은 포함하지 않도록 구성(전체 행 중, 내부IP 뒷 세자리 열은 빼고 저장)

5. 새로 저장되는 파일에도 head 셀은 존재하야함(내부IP, 외부포트, 내부포트, 룰 이름)

다음과 같은 룰이 있다.

일단 내용을 이해하는데 어렵지는 않았다.

일단 엑셀을 다루어야 하기 때문에 인터넷에 파이썬 엑셀이라고 쳐 보았다.

파이썬에서 엑셀을 다루려면 엑셀관련 모듈을 다운 받아야한다.

인터넷에 찾아보니 OpenPyxL이라는  모듈이 가장 좋다고 하여 OpenPyxL 모듈을 다운 받기로 하였다.

pip install openpyxl

cmd 창을 관리자모드로 킨 다음 OpenPyxL을 다운 받는다.

파이썬으로 엑셀 파일 열기 전에 알아야 할 것이 있다.

1. workbook : 엑셀 파일

2. worksheet : 엑셀의 시트

3. cell : 엑셀 시트의 셀 하나

이정도 개념을 알아낸 다음 파이썬을 킨다.

엑셀 파일 열기(읽기)

import openpyxl

openpyxl 모듈을 import 해준다.

그 후 open할 파일을 저장해준다.

rb = load_workbook("C:/port.xlsx")

rb 변수에 port.xlsx파일 자리에는 오픈할 엑셀파일을 넣어준다.

ws = rb['hansome_guencheol']

ws 변수안에 port.xlsx 파일안에 있는 시트를 넣어준다.

그 후 원하는 셀을 print하면 cell에 있는 값이 출력된다.

print(ws['C4'].value)

출력을 하면

 

C4셸의 있는 값 5000이 출력 된다.

 

엑셀 파일 열기(쓰기)

우선 openpyxl 모듈을 import 해줘야한다.

1. openpyxl 모듈 open하기

import openpyxl

그 후 쓰기 파일로 열 파일을 변수에 저장해준다.

2. 쓸 엑셀파일 열기

wb = openpyxl.Workbook()

여기서 주의해야 할 점은 workbook이라는 모듈이 있고 Workbook이라는 클래스가 있는데 혼동하지 마라

만약

다음과 같은 에러가 뜬다면 지금 workbook이라는 모듈을 썼기 때문에 모듈이 2개가 충돌이 난 것이다.

엑셀파일을 오픈하려면 active해주면 된다.

3. 엑셀파일의 sheet 열기(?)

sheet1 = wb.active

sheet또한 추가가 가능하다.

sheet2 = wb.create_sheet('result')

첫번째 시트는 자동적으로 만들어지고 다음과 같이 입력하면 'result'라는 두번째 시트가 생성될 것이다.

또한

sheet3 = wb.create_sheet('result1',1)

다음과 같이 입력하면 첫번째 시트에 result1이라는 이름으로 저장되어 들어간다.

다음과 같이 입력하다 만약 시트의 이름을 변경해야 한다면?

-> tilte 명령어를 쓰면 된다.

4. sheet 이름 바꾸기

sheet2.title = 'example'

만약 엑셀을 저장하려면?

wb.save를 이용하면 된다.

이제 엑셀에다 글을 입력해보자

1. 셀을 지정해서 그 셀에다 값 집어넣기

sheet2['A1'] = 'example

쓰고 싶은 셀을 지정해서 그 셀에다가 값을 집어 넣으면 된다.

 

2. cell= ?, row = ?로 접근하기

sheet2.cell(row = 3, column = 3).value = '3,3'

행과 열의 값을 직접 입력하여 해당되는 셀에다 값을 넣음

3. append()함수 사용

sheet2.append([입력값1, 입력값2, 입력값3, 입력값 4])

append 함수를 사용하면 입력이 되어있는 셀 밑에 셀의 첫번째 행부터 차례대로 입력값이 들어간다.

이렇게 입력이 끝나게 되면 파일을 저장해줘야 한다.

4. 파일 저장하기

wb.save('파일경로')

' '안에는 저장할 파일명의 경로를 집어 넣으면 된다.

다음과 같이 입력하고 저장 후 파일을 open 하면

 

다음과 같이 sheet에 파일이 저장되어 있다.

  • 지나다 2019.12.02 11:24

    파이썬으로 엑셀 다루기를 독학으로 하고 있는데요.
    openpyxl 제공 사이트에서 제공하는 튜토리얼이나 샘플소스로는 정말 파악하기 어려운 것들을 너무 잘 정리해 주셨네요.
    혹시 교수님이 정리해 주신 것인가요?
    아니면 어떤 책이나 웹사이트를 참조하셨나요?
    시중의 책은 다 뒤져봤지만 이게 잘 나와 있는 책이 없어서요.

  • 음하하 2020.01.13 11:51

    대학생 2020.01.13 02:15
    안녕하세요
    파이썬을 공부하고있는 학생입니다.
    import openpyxl
    wb1 = openpyxl.load_workbook('./data1.xlsx')

    wb1['Sheet1']

    sheet=wb1.get_sheet_by_name('Sheet1')

    sheet=wb1.active

    sheet=wb1['Sheet1']
    A1 = sheet.cell(row = 1000, column = 3)

    wb1.save('./excel test.xlsx')


    wb2 = openpyxl.load_workbook('./data2.xlsx')

    wb2.close()

    wb2['Sheet1']
    sheet=wb2.get_sheet_by_name('Sheet1')

    sheet=wb2.active

    sheet=wb2['Sheet1']
    A1=sheet['A1']
    A1.value
    cell_range = sheet['A1':'C1000']

    wb2.save('./excel test.xlsx')

    2가지 질문이 있습니다. 꼭 답변부탁드립니다.ㅠㅠ

    1. 제가 이런식으로 진행을하였으나 wb1과 wb2의 데이터가 합쳐져서 엑셀파일이 저장이 안되고 wb1만 저장이 됩니다. 어떻게 하면좋을까요?
    2. 범위설정을 위에 나와있는데로 하였으나, 범위가 지정이 안되었습니다. 범위 지정하는 방법알려주시면 감사하겠습니다.



    출처: https://doitnow-man.tistory.com/159 [즐거운인생 (실패도 또하나의 성공)]

  • 1234 2020.08.10 23:49

    글을 간결하고 이해하기 쉽게 잘 쓰시네요. 잘 보고 갑니다