Old Branch

Python Basic - 파이썬 엑셀(Excel, CSV) 읽기 및 쓰기 (1)

woolbro 2019. 7. 5. 11:10
반응형

이번 포스팅은 파이썬으로 엑셀과 CSV 파일을 읽고 쓰는 과정을 같이 해보려고 합니다.

 

파이썬 파일 핸들링은 아래 접은 글을 펴시면 나와있어요~ 링크 걸어놓을게요 :)

...더보기

 


 

파이썬에서는 CSV 파일을 핸들링 할 수 있는 모듈을 제공합니다.

 

지금부터 엑셀과 CSV 파일을 파이썬으로 열어 볼 것이니, 당장 모듈을 끌어와야겠죠~?

 

 

모듈 임포트(import) 하기

파이썬 모듈을 가져오겠습니다 :) 모듈 이름은 csv 입니다!

 

import csv

 

모듈을 import 했으니, csv파일을 읽어 올 수 있습니다 매우 간단하게요!!

 

우선, 파이썬 파일과 같은 경로에 resource폴더를 만들어 주고, 그 안에 sample1.csv 파일을 만들겠습니다.

 

sample1.csv
0.00MB

위에 첨부 해 드리니, 다운받으셔서 사용하셔도 되고, 아니면 다른 엑셀파일이나 csv도 가능하니 읽어주시기만 하면 됩니다 :)

 

resource 경로에 있는 sample1.csv파일

 

CSV 파일 읽기

 위의 sample1.csv 파일을 읽어보겠습니다.

 

import csv

with open('./resource/sample1.csv','r') as f:
    reader  = csv.reader(f)

    #확인하기
    print(reader)

 

위의 구문에서, with open 구문은 파일을 열고 자동으로 닫아주는 역할을 합니다 ! 

 

위 코드를 실행시키면 

 

 

이렇게 실행 결과가 나오네요 :) 

그럼, 우리 자세하게 확인을 해보도록 하겠습니다

 

with open('./resource/sample1.csv','r') as f:
    reader  = csv.reader(f)

    #확인하기
    print(reader)
    print(type(reader))
    print(dir(reader))

위의 내용에서 print문을 조금 더 추가했어요! 바로 type() 과 dir() 을 출력 해 주었습니다.

 

type() 은 형태를 출력 하게 해 주고, dir로 사용 할 수 있는 메소드를 확인 해 줍니다.

 

type()의 실행결과는 class가 나오고, dir()의 실행결과는 리스트로 쭈욱 뿌려준 메서드의 이름들이 나옵니다.

<class '_csv.reader'>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute __', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__' , '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__ str__', '__subclasshook__', 'dialect', 'line_num']

 

위의 결과 중 __iter__가 보이면, 우리는 반복문에서 사용 할 수 있다는 것을 알 수 있습니다.

 

당장 반복문으로 돌려보겠습니다.

 

with open('./resource/sample1.csv','r') as f:
    reader  = csv.reader(f)

    #확인하기
    print(reader)
    print(type(reader))
    print(dir(reader))


    for txt in reader:
        print(txt)

위의 가장 마지막 print(txt)를 확인 해 보면 아래와 같은 결과가 나오게 됩니다.

 

csv파일을 파이썬으로 읽었어요~! 

 

 

이번에는 비슷한 파일이지만 위와같이 콤마로 구분되지 않은 데이터를 읽어보려고 합니다.

 

마찬가지로 resource 폴더에 넣을거구요, 이름은 sample2.csv로 하겠습니다.

 

sample2.csv
0.00MB

위의 코드를 사용해 sample2를 읽어보면.....

 

 

이렇게 나오게 되네요.... 파일 내부에 데이터를 구분 해 주는 문자가 sample1 과는 달라서 나타나는 현상입니다.

 

reader() 에 옵션을 넣어서 읽어보겠습니다

 

reader(f , delimiter = '|') 으로 넣어서 실행을 한번 해보도록 하겠습니다

 

with open('./resource/sample2.csv','r') as f:
    reader  = csv.reader(f,delimiter = '|')

    for txt in reader:
        print(txt)

 

위의 코드로 읽으면 리스트의 형태로 가져와 주는 것을 확인 할 수 있습니다!

 

 

딕셔너리의 형태도 중요합니다. 딕셔너리의 형태로 변환을 해 보도록 하겠습니다.

 

with open('./resource/sample1.csv','r') as f:
    reader = csv.DictReader(f)
    for c in reader:
        print(c)

 

위와같이 csv.DictReader(f)를 사용하면, 딕셔너리의 형태로 가져오게 됩니다.

위의 코드를 응용해서, 각각의 값들을 빼 내보도록 하겠습니다

 

with open('./resource/sample1.csv','r') as f:
    reader = csv.DictReader(f)
    # for c in reader:
    #     print(c)
    for c in reader:
        for k, v in c.items():
            print(k, v)
        print("===================")

 

그럼 이제 key, value 로 나뉘어서 내용을 출력 해 주게 됩니다.

 

키와 값을 가지고 쉽게 데이터를 볼 수 있고 가져올 수 있으니 편하게 사용 할 수 있겠죠~?