01. IO(Input Output) Stream
- 프로그램이 가지고 있는 또는 가지고 있지 않은 데이터를 외부(다른 프로그램)로
보내거나 가져오는 동작을 말합니다.
- Program에서 출력 ---------------> 모니터, 디스크 장치, 네트워크, USB, Bluetooth, 출력 스트림, System File, Socket File
- 키보드, 디스크 장치, 네트워크, USB, Bluetooth ---------------> Program, 입력, File, Socket File, 입력 스트림
- 입출력 Stream은 FIFO(First In First Out, 지하철 표를내고 들어가는
출입구와 비슷한 구조입니다.(Queue 구조)
- 스트림은 단방향 구조입니다. 따라서 오로지 출발지와 목적지를 지정하면
한곳으로만 데이터가 전송됩니다.
서로 네트워크가 연결되면 Pipeline이 설정되어 보내고 받는 2개의 객체(통로)가 만들어짐.
- 스트림은 전송하려는 데이터가 많을 경우 지연시간이 발생합니다.
전철의 지연 운행과 비슷한 동작을 함.
- 전송 제어: 고속 장치와 저속장치가 있는 경우 송수신 장치가 저속으로 송수신되어 데이터 유실이 발생되지 않도록 함.
- io는 파이썬에의하여 사용됨으로 패키지명으로 사용 할 수 없음.
- 자료실에서 견본 이미지 8장을 준비합니다. 'C:/홈 폴더/swiss' 폴더에 저장합니다.
[실행 화면]
6. 스크립트를 실행하는 폴더: F:\201701_python\ws_python\oop\oop1
▷ ioexam.File1.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os
f = 'C:/201705_python/swiss/sw01.jpg'
if (os.path.exists(f)):
print('1. 파일이 존재합니다.')
fname, fext = os.path.splitext(f)
print('2. 순수 파일명: ' + fname)
print('3. 파일 확장자: ' + fext)
fsize = os.path.getsize(f) # byte
print('4. 파일 크기: ' + str(int(fsize/1024)) + " KB")
print('5. 파일인지 검사: ' + str(os.path.isfile(f)))
print()
print('6. 스크립트를 실행하는 폴더: ' + os.getcwd())
print('7. 스크립트의 절대 경로: ' + os.path.abspath(__file__))
print()
newf = 'C:/201705_python/swiss/sw01_new.jpg'
# 정상적으로 변경시 None이 출력됨
print('8. 파일명의 변경: ' + str(os.rename(f, newf)))
else:
'''
f = 'C:/201705_python/swiss/sw02.jpg'
print('9. 파일 삭제: ' + str(os.remove(f))) # 정상적으로 삭제시 None이 출력됨
print('10. 파일 생성')
# 파일 생성, 폴더는 미리 생성되어 있어야함.
f = open('C:/201705_python/io/test1.txt', 'w')
f.close()
print('11. 이름 변경')
src = 'C:/201705_python/swiss/sw03.jpg'
dest = 'C:/201705_python/io/sw03.jpg'
print('파일 이동: ' + str(os.rename(src, dest))) # 정상적으로 삭제시 None이 출력됨
'''
print('12. 이미지 파일 검사')
src = 'C:/201705_python/swiss/sw04.JPG'
filename, extension = os.path.splitext(src)
print('파일명: ' + filename)
print('확장자: ' + extension)
if extension.lower() in '.jpg' or extension.lower() in '.png' or extension.lower() in '.gif' :
print('이미지 파일입니다.')
else:
print('이미지 파일이 아닙니다.')
-----------------------------------------------------------------------------------
02. 폴더 생성 및 이름 변경 및 삭제
- mkdir(): 부모 폴더 아래 최하위 폴더 하나만 생성
- mkdirs(): 경로상에 명시된 부모 폴더를 포함하여 모든 폴더를 생성
- src.renameTo(dest): 폴더가 존재하면 폴더명을 변경하지 않음,
커서가 폴더운에 있으면 Rock이 잠겨 변경 불가능함.
- delete(): 폴더나 파일 즉시 삭제, 하위 폴더가 있으면 삭제 안됨.
- deleteOnExit(): 프로그램 종료시 삭제, 임시 폴더의 사용
[실행 화면]
▷ ioexam.File2.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os, glob
os.chdir('C:/201705_python/io') # 기준 폴더의 지정
print('1. 폴더 생성')
newfolder = 'temp'
if os.path.exists(newfolder) == False:
os.mkdir(newfolder)
print(' 폴더를 생성했습니다.')
else:
print(' 폴더가 이미 있습니다.')
print('2. 하위폴더 모두 생성')
newfolder = 'sw/python/scraping'
if os.path.exists(newfolder) == False:
os.makedirs(newfolder)
print('3. 폴더 이름 변경')
folder = 'temp' # 현재 기준 경로 C:/201705_python/io
foldernew = 'data'
if os.path.exists(foldernew) == False:
os.renames(folder, foldernew)
folder = 'data'
print('4. 폴더의 삭제: ' + str(os.rmdir(folder))) # 정상적으로 변경시 None 출력됨.
print("5. 파일 목록")
folder = 'C:/201705_python/swiss'
file_list = os.listdir(folder) # list로 리턴
print(file_list) # ['sw04.jpg', 'sw05.jpg', 'sw06.jpg'...
os.chdir('C:/201705_python/swiss') # 기준 폴더의 지정
print()
files = '*.jpg'
file_list = glob.glob(files) # jpg 파일만 list로 리턴
print(type(file_list)) # <class 'list'>
length = len(file_list) # list의 요소의 갯수 산출
for index in range(length): # 0~ 갯수 - 1
fname = file_list[index] # 파일 산출
size = int(os.path.getsize(fname)) # 파일 사이즈 산출
size = int(size / 1024+0.5); # 반올림
print(str(index) + '. ' + fname + ' (' + str(size) + ' KB)')
-----------------------------------------------------------------------------------
- 견본 이미지 1장, 텍스트 파일 1개를 준비합니다.
- 폴더를 생성 후 txt 와 jpg 파일을 복사해보세요.
- 파일 입출력 모드
r: 읽기 모드 (디폴트)
1. Text 파일 준비
▷ C:/작업 기준 폴더/io/news.txt
-----------------------------------------------------------------------------------
심야 콜버스 2016년 7월부터 서울 전역서 운행
-----------------------------------------------------------------
【서울=뉴시스】임재희 기자 = 심야 콜버스가 시범운영을
거쳐 이르면 7월부터 서울 전역에서 운행될 전망이다.
모바일 앱 운영사인 콜버스랩은 시범 운행 등 본 사업과 관련해
서울시 택시운송사업조합과 합의를 마쳤다고 31일 밝혔다.
우선 콜버스랩과 택시조합은 다음달 중순부터 심야 콜버스를
강남·서초·송파구 등 강남권역에서 두달간 운행한다.
운행시간은 오후 11시부터 다음날 오전 4시까지다.
-----------------------------------------------------------------------------------
2. Text 파일 복사
1) 하나의 라인 읽고 쓰기
▷ ioexam.TextCopy.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os
os.chdir('C:/201705_python/io')
fr = open('news.txt', 'r')
fw = open('news_copyed.txt', 'w')
line = fr.readline()
while line:
print('%s' %line, end='') # 화면 출력
fw.write(line) # 파일 출력
line = fr.readline()
fr.close()
fw.close()
-----------------------------------------------------------------------------------
2) List를 이용한 하나의 라인 읽고 쓰기
▷ ioexam.TextCopy2.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os
os.chdir('C:/201705_python/io') # 현재 기준 폴더 변경
f = open('news.txt', 'r')
data = [] # 읽은 내용을 저장할 list
line = f.readline()
while line:
print('%s' %line, end='') # end='': 라인 변경하지 않음, 파일 라인 변경 그대로 처리
data.append(line) # list에 추가
line = f.readline()
f.close()
fw = open('news_list_copyed.txt', 'w')
fw.writelines(data)
fw.close()
-----------------------------------------------------------------------------------
04. Image(Binary 파일)/영화 파일 복사
- rb: binary 파일 읽기
- wb: binary 파일 쓰기
▷ ioexam.ImgCopy1.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os
os.chdir('C:/201705_python/swiss') # 현재 기준 폴더 변경
buffersize = 1024
src = open('sw05.jpg', 'rb') # read binary
dest = open('sw05_copy.jpg', 'wb') # write binary
data = src.read(buffersize)
while data:
dest.write(data)
data = src.read(buffersize)
src.close()
dest.close()
-----------------------------------------------------------------------------------
05. Console에서 실행 옵션을 이용하여 파일명을 전달받아 복사하는 프로그램을 제작하세요.
- sys 모듈을 이용하여 실행 옵션을 입력 가능
- ImgCopy2.py 파일의 확장자를 생략하면 안됩니다.
python ImgCopy2.py, sw06.jpg, sw06_copy.jpg, sys.argv[0], sys.argv[1], sys.argv[2]
[실행 화면]
▷ ioexam.ImgCopy2.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import os, sys
os.chdir('C:/201705_python/swiss') # 현재 기준 폴더 변경
buffersize = 4096
src = open(sys.argv[1], 'rb') # read binary
dest = open(sys.argv[2], 'wb') # write binary
count = 0 # 읽은 횟수 카운트
data = src.read(buffersize)
while data:
count = count + 1
dest.write(data)
data = src.read(buffersize)
print('#', end='')
if ((count != 0) and (count % 20)) == 0:
print()
src.close()
dest.close()
print('\n 파일이 복사되었습니다.')
-----------------------------------------------------------------------------------
'빅데이터 프로그래밍 > Python' 카테고리의 다른 글
[Python] 15. [Network] Network(네트워크), Socket, Echo Server 1 (0) | 2017.08.02 |
---|---|
[Python] 14. [IO] 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템을 작성하세요. (0) | 2017.08.02 |
[Python] 12. 예외처리(Excetption), try, except ~ else ~ finally 실습 (0) | 2017.08.02 |
[Python] 11. 상속(ingeritance), 부모클래스의 생성자호출, 생성자/메소드 오버로딩, 다중 상속 (0) | 2017.08.02 |
[Python] 10. Class 선언, 클래스 멤버, 메소드, 인스턴스 멤버, 메소드의 실습, 생성자, 소멸자, 모듈 분리 (0) | 2017.08.02 |
댓글