[Python] 13. [IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록, 파일 복사

2017. 8. 2. 17:12·빅데이터 프로그래밍/Python
728x90
반응형

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는 파이썬에의하여 사용됨으로 패키지명으로 사용 할 수 없음.

1. 파일 다루기

- 자료실에서 견본 이미지 8장을 준비합니다. 'C:/홈 폴더/swiss' 폴더에 저장합니다.

[실행 화면]

1. 파일이 존재합니다.
2. 순수 파일명: F:/201701_python/swiss/sw01
3. 파일 확장자: .jpg
4. 파일 크기: 134 KB
5. 파일인지 검사: True

6. 스크립트를 실행하는 폴더: F:\201701_python\ws_python\oop\oop1
7. 스크립트의 절대경로: F:\201701_python\ws_python\oop\oop1\File1.py
 
8. 파일명 변경: None
9. 파일 삭제: None
11. 파일명 이동: None
12. 이미지 파일 검사
파일명: C:/201705_python/swiss/sw04
확장자: .JPG
이미지 파일입니다.
 
▷ 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(): 프로그램 종료시 삭제, 임시 폴더의 사용

[실행 화면]

1. 폴더 생성
2. 폴더들 생성
3. 폴더의 이름 변경
4. 폴더의 삭제: None
5. 파일 목록
['data', 'sw', 'sw03.jpg', 'sw04.jpg', 'sw05.jpg', 'sw06.jpg', 'sw07.jpg', 'temp2', 'test1.txt']
 
<class 'list'>
0. sw04.jpg (173 KB)
1. sw05.jpg (504 KB)
2. sw06.jpg (2452 KB)
3. sw07.jpg (568 KB)
4. sw08.jpg (502 KB)
▷ 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)')

    

-----------------------------------------------------------------------------------
 
03. Text 파일 복사

- 견본 이미지 1장, 텍스트 파일 1개를 준비합니다. 
- 폴더를 생성 후 txt 와 jpg 파일을 복사해보세요.
- 파일 입출력 모드
  r: 읽기 모드 (디폴트)

  r+: 읽기 + 쓰기 모드
  w: 쓰기 모드
  a: 쓰기 + 이어쓰기 모드
  t: 텍스트 모드 (디폴트)
  b: 바이너리 모드
 

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]

[실행 화면]

/ws_python/oop/ioexam>python ImgCopy2.py sw06.jpg sw06_copy.jpg
###################
###################
############
파일 복사 완료
▷ 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 파일이 복사되었습니다.')    





-----------------------------------------------------------------------------------
 

728x90
반응형

'빅데이터 프로그래밍 > 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
'빅데이터 프로그래밍/Python' 카테고리의 다른 글
  • [Python] 15. [Network] Network(네트워크), Socket, Echo Server 1
  • [Python] 14. [IO] 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템을 작성하세요.
  • [Python] 12. 예외처리(Excetption), try, except ~ else ~ finally 실습
  • [Python] 11. 상속(ingeritance), 부모클래스의 생성자호출, 생성자/메소드 오버로딩, 다중 상속
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nginx ssl 적용
    Java Array
    jsp parameter
    API 설계
    오류
    자바 객체 지향
    에디터 팁
    servlet class
    브라우저 자동화
    Node
    프런트엔드
    css block
    ssl 인증서 발급
    svelte
    vue 설치
    vue cli
    SSL 인증서
    vscode
    자바 for문
    css transition
    java casting
    VS Code 팁
    자바 클래스
    티스토리 자동화
    jsp include
    러스트
    css perspective
    Rust lang
    nginx
    Extension Bisect
    자바 생성자
    리눅스 설치
    docker
    css float
    nginx ssl 설정
    css list
    css table
    AI 코딩 에이전트
    proxy pass
    lang rust
    자바 exception
    rust linux
    ubuntu
    자바 배열
    css tb
    React Compiler
    클론코딩
    mysql db
    spring java
    gitlab 설치
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Python] 13. [IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록, 파일 복사
상단으로

티스토리툴바