[패스트캠퍼스python] 외부파일 CSV, 엑셀 읽기 및 쓰기

파이썬 인강 : 외부파일 CSV, 엑셀 읽기 및 쓰기

1. CSV 읽기, 쓰기

위의 예제를 차근차근 보자
with open(작성한 파일을 저장할장소/저장할 파일명, ‘w’(작성한다는는 의미), newline=’’) as f:

  1. newline=’’
    이 의미는 이 부분이 없으면 한 줄씩 띄어쓰기로 for문을 순회하면서 데이터가 자동저장된다
    하지만 데이터 양이 많을수록 용량도 커지고 쓸데없이 불편할 수 있다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1,2,3

    4,5,6

    7,8,9,

    10,11,12

    13,14,15

    16,17,18
    그래서 ‘’빈칸을 넣어서 띄어쓰기를 없애는 것이다
    newline=’’을 적용하면 아래와 같이 결과값이 출력된다

  1. writerow()와 writerows()의 차이점
  • writerow()는 한줄씩 띄어쓰기하여 입력된다 -> for문을 썼기에 순회하면서 전체 내용이 출력되었다.
  • writerows() 한줄씩이 아닌 전체데이터가 입력된다.(for문 반복없이 한번에 입력)

한줄씩 순회하면서 입력 방법(writerow)와 한꺼번에 전체데이터를 입력하는 방법(writerows)은 각각의 장점이 있다
예시로 회원가입목록에서 1950년생이하는 빼고 데이터를 출력하고싶을때 if조건문으로 필터링을 걸어줘서 writerow이 유용하게 쓰인다

2. 엑셀 쓰기 읽기

엑셀을 처리하는 오픈소스 : openpyxl, xlsxwriter, xlrd, xlwt, xlutils
여러가지 방법이 있지만 pandas를 가장 많이 사용한다
그 이유는 pandas는 최다사용오픈소스인 openpyxl, 랭킹 1위인 xlrd를 내부적으로 만능으로 사용할 수 있기때문이다

pandas를 이용하기 위해서는 아래 3가지를 다운로드해줘야한다
1. pip install xlrd
2. pip install openpyxl
3. pip install pandas


파이썬 인강 : 데이터베이스 연동(SQLite)

SQLite는 기본적으로 설치가 되어있다. 따라서 따로 설치할 필요없이 바로 import하면 된다

1. 테이블 생성 및 삽입

import datetime
import sqlite3

2. 삽입 날짜 생성

많이 쓰니까 꼭 알기

1
2
now = datetime.datetime.now()
print('now', now)

보기 불편하니까 포맷을 만들면 익숙한 시간형식으로 나타낼수있다

1
2
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDatetime', nowDatetime)

3. DB생성 & Autocommit 그리고 커밋

본인 DB 파일 경로로 설정해주면된다
isolation_level=None 을 넣었을 경우 자동으로 커밋 반영(Auto Commit)해준다.
설정하지 않았다면 수정 후 conn.commit() 명령어를 입력해야지만 반영된다

1
conn = sqlite3.connect('본인DB파일경로/database.db', isolation_level=None)

4. Cursor연결

1
2
c = conn.cursor()
print('Cursor Type : ', type(c))

5. 테이블 생성

데이블에서 쓰일 수 있는 Datatype에는 총 5가지가 있다

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • BLOB
1
2
3
c.execute(
"CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text, phone text, website text, regdate text)")
#AUTOINCREMENT

6. 데이터 삽입

삽입에는 크게 두가지 방식이 있다

  1. 첫번째방법
    ? 를 넣는 이유는 위에서 만들었던 데이터(“nowDatetime,”)를 넣게되면 스트링형식으로 들어가기때문에 ?를 주고 뒤에 매개변수로 튜플형태로 입력한다
1
c.execute("INSERT INTO users VALUES (1 ,'Kim','Kim@naver.com', '010-0000-0000', 'Kim.com', ?)", (nowDatetime,))
  1. 두번째 방법
    ?의 갯수와 삽입할데이터의 갯수를 순서대로 일치시켜줘주면된다
1
c.execute("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", (2, 'Park', 'Park@naver.com', '010-1111-1111', 'Park.com', nowDatetime))

7. Many 삽입(튜플, 리스트형태를 삽입가능)

가장 중요한 부분이다!
Many는 이름 그대로 대용량 데이터를 삽입하는 방법으로 튜플이나 리스트형태를 삽입가능하다

1
2
3
4
5
6
7
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDatetime),
(4, 'Cho', 'Cho@naver.com', '010-3333-3333', 'Cho.com', nowDatetime),
(5, 'Yoo', 'Yoo@naver.com', '010-4444-4444', 'Yoo.com', nowDatetime)
)

c.executemany("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", userList)

웹상에서 입력받은 데이터를 sqlite를 통해서 장고의 경우, orm을 통해서 대용량데이터를 입력할 수 있다

8.테이블 데이터 삭제

지우는 명령어는 conn.execute(“delete from users”)지만 몇개의 행을 지웠는지까지 확인할 수 있는 아래 명령어를 쓰는 것이 더 좋다

1
print("users db deleted : ", conn.execute("delete from users").rowcount, "rows")

9. 롤백

되돌리기를 뜻하며 커밋한 걸 되돌리는 것이다.

1
conn.rollback()

10. 접속 해제

DB를 다 사용했을때는 꼭 접속 해제 명령어를 입력해줘야한다.

1
conn.close()