Stream
: cpu와 연결된 키보드, 마우스, 저장 장치, 네트워크 등 모든 주변 장치의 입력과 출력을 byte들의 흐름으로 생각하는 것
- Standard stream
* 기본적인 스트림들은 프로그래머가 생성하지 않아도 프로세스가 시작되면 자동으로 생성
이름 | 스트림 | 연결 장치 | 표준파일 넘버 |
stdin | 표준 입력 스트림 | 키보드 | 0 |
stdout | 표준 출력 스트림 | 모니터 화면 | 1 |
stderr | 표준 오류 스트림 | 모니터 화면 | 2 |
파일 입출력
- 파일열기
open (파일경로, 모드)
* 프로그램이 생성한 정보를 영구적으로 저장하기 위해 파일에 기록
* 파일 입출력을 위해 파일 위치를 확인하고 버퍼를 준비하는 과정을 하는 것이 open 함수
* 파일경로 : 입출력 대상의 이름. 디렉토리 경로 포함해서 쓰거나 파일명만 넣을 경우 현재 디렉토리에서 찾음
* 모드 : 읽기, 쓰기, 추가 등 파일을 어떤 모드로 처리할 것인가 지정
모드 | 설명 |
r | 파일 읽기. 파일이 없을 시 오류 발생 |
w | 파일 기록. 파일이 이미 있으면 덮어씀 |
a | 파일에 데이터 추가 |
x | 파일에 기록하되 파일이 이미 있으면 실패 |
- 파일 쓰기
* open함수는 파일 입출력을 준비하고 파일 객체를 리턴
* 데이터를 기록할 때는 출력할 데이터를 인수로 전달하여 write메소드를 호출
* 파일을 다 사용한 후에는 꼭! close 메소드로 닫아 뒷정리를 수행
- 파일 쓰기 예시
f = open("test.txt", "wt" ) # test파일을 쓰기모드로 열기 (파일명만 주었으므로 현재 디렉토리에 생성)
f.write("연습하는 중입니다")
f.close()
- 파일 읽기 예시 1)
try:
f = open("test.txt", "rt") # 읽기모드로 열기
text = f.read() # 읽어오는 방법. 대용량 파일일 경우 메모리 초과될 수 있음
print(text) # 연습하는 중입니다
except FileNotFoundError:
print("파일이 없습니다. ")
finally:
f.close() # 파일 닫기
- 파일 읽기 예시 2)
f = open("text.txt", "rt")
for line in f: # 파일안에 한 줄씩 줄단위로 읽어오기
print(line)
f.close()
- 파일의 입출력 위치 지정
seek(위치, 기준)
* 파일의 입출력 위치를 바꿔가며 파일의 원하는 부분에 자유롭게 접근하는 방식 (임의 접근)
* '기준'에서부터 '위치'만큼 떨어진 곳을 기준으로 함
- 입출력 예시
f = open("sample.txt", "rt") # life sometime deceive you Don't ...
f.seek(12, 0) # 파일을 열고 12byte를 건너뜀 (12번째 칸으로 간다)
text = f.read() # 이 위치에서 읽기 시작
f.close()
* 영어는 1byte를 차지하므로 앞의 12글자가 빠지게 됨
* 임의 접근은 인코딩 방식이 가변적인 텍스트 파일에는 적용하기가 어렵다
- 파일 내용 추가
f = open("sample.txt", "at") # append모드. 기존 내용 뒤에 덧붙임
f.write("\n가나다라") # 개행한 뒤 다음 줄에 내용 덧붙임
f.close()
- 파일 입출력 시 주의사항
* 파일 입출력이 끝나면 반드시 close함수로 닫아야 한다
* 사실 굳이 닫지 않아도 프로그램 종료 시 자동으로 닫히지만 파일을 연속적으로 사용할 때는 꼭 닫아줘야 한다
* 매번 파일을 사용하고 열 때마다 open과 close를 호출하는 것은 귀찮고 가끔 잊어버려 파일이 손상된다
- with 블록을 이용하자!
with open("sample.txt", "rt") as f:
text = f.read()
print(text)
* with구문으로 파일을 열고 as구문으로 파일 객체에 대입한 후 with블록 내에서 파일을 사용
* with 블록을 벗어나면 파일이 자동으로 닫힘
* 입출력 중에 예외가 발생해도 파일은 반드시 닫힘
* 좀 더 세세하고 확실한 자원정리를 할 때에는 try-finally 구문을 사용하는 것이 정석
CSV Files (comma separated values format)
: 하나 이상의 필드를 쉼표로 구분한 text 데이터 및 text 파일
: 다양한 스트레드시트 프로그램 간에 데이터를 교환하고 변환하는데 사용
- CSV 읽기 1)
def read_csv(filepath):
elements = []
with open(filepath, 'r', encodig='utf-8') as fp: # 읽기 권한으로 열기
data = fp.read() # 파일열기
rows = data.split("\n") # 레코드를 구분하여 리스트에 대입
for r in rows:
fields = r.split(',') # 필드 구분
elements = (fields[0], fields[1], fields[2], fields[3]) # 튜플로 생성
elements.append(element) # 가공 데이터 리스트에 추가하기
return elements
- CSV 읽기 2)
import csv # python에서 기본적으로 제공하는 csv모듈
def read_csv(filepath):
elements = []
with open(filepath, 'r', encoding = 'utf-8') as fp:
reader = csv.reader(fp) # csv파일의 한 줄 단위 콜렉션 반환
for row in reader:
element = (row[0], row[1], row[2], row[3])
elements.append(element)
return elements
- CSV 쓰기
import csv
def write_csv(filepath, element):
with open(filepath, 'a', encoding='utf-8', newline = '') as fp: # append모드
wr = csv.writer(fp) # writer()는 writer객체 반환
wr.writerow(element) # element 리스트의 요소를 콤마로 구별하여 넣어줌
Excel 파일 (.xlsx)
: XML기반의 기본 Excel 파일 형식.
: 파이썬에서 액셀 데이터를 다루기 위해서는 외부패키지 설치 필요
- Excel 파일 읽기
시트객체['셀'].value
시트객체.cell(row = 행번호, column = 열번호).value
* 액셀 파일의 시트 안에 있는 셀에 접근하는 두가지 방법
- XLSX 파일 읽기 예시
from openpyxl import load_workbook
wb = load_workbook(filename = 'sample.xlsx') # 액셀파일 불러오기
sheet = wb['Sheet'] # sheet 이름으로 불러오기
print(sheet['A2'].value) # 특정 셀 값 출력
- Excel 파일 쓰기
시트객체['셀'] = 값
시트객체.cell(row = 행번호, column = 열번호, value = 값)
- XLSX 파일 쓰기 예시
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
filename = 'sample.xlsx' # 워크북 이름
ws = wb.active # 현재 활성화된 시트
ws.title = 'data' # 시트 이름 바꾸기
for r in range(1, 10): # 파일의 1~9행에 순서대로
ws.append(range(50)) # 셀에 0~49 채우기
ws2 = wb.create_sheet(title = 'pi') # 워크북에 'pi'라는 새로운 시트 생성
ws2['A2'] = 100 # 데이터 삽입
wb.save(filename) # 저장
'Study > Python' 카테고리의 다른 글
[Python #5] Class, Module, Package (0) | 2021.10.31 |
---|---|
[Python #5] Dictionary, Set, Collection (0) | 2021.10.10 |
[Python #3] String, List & Tuple (0) | 2021.10.05 |
[Python #2] Loop & Function (0) | 2021.09.23 |
[Python #1] 파이썬 기본 구조 (1) | 2021.09.23 |