본문 바로가기

python

28. 이미지_바이너리(with~as, seek, ospathgetsize, osremove, osrename, oslistdir, globglob, osgetcwd, oschdir, osmkdir, osrmdir, shutilrmtree, ospathexists,ospathisfile)

728x90
반응형

 

142. 바이너리 파일 복사하기(read, write)

    "이미지 파일을 파이썬으로 복사하는 방법"

예제:

bufsize=1024   #이미지를 저장 할 최소 기본 메모리

               #사이즈

f=open("d:\\16.png",'rb')  #바이너리 파일을 읽겠다.

       #바이너리 파일은 2진으로 되어있는 이미지 파일!!

h=open("d:\\16_copy.png",'wb')

 

data=f.read(bufsize)

 

while data:

    h.write(data)

    data = f.read(bufsize) #이거 없으면 무한돈다

h.close()

   

 


 

 

 

 

 

문제338.

아래의 개사진 전부 d드라이브 밑에 image 라는 폴더를 만들고

거기에 복사하는 파이썬 코드를 작성하시오

 

import os

path_dir='c:\\dog_images'

bufsize=1024

 

file_list=os.listdir(path_dir)

file_list.sort()

#print(file_list)

 

for items in file_list:

    f=open("c:\\dog_images\\"+items,'rb') 

    h=open("c:\\images\\"+items,'wb')

    data=f.read(bufsize)

 

    while data:  #불러올 데이타가 있는 동안 반복해라

        h.write(data)

        data = f.read(bufsize)  #마지막으로 불러오는 데이터라면, while 종료된다

    f.close()

    h.close()

 

**** f.read(bufsize) 수타래(?) 짜듯이

사진을 한올한올 갖고와서 h.write(data) 하는거임.

그래서 한올한올 사진다 가져오면 while 문이 끝나는 것임.

 

 

 

143. 파일을 열고 자동으로 닫기 (with~as)

예제:

f=open("d:\\stockcode_part.txt",'r')

data=f.readlines()

print(data)

f.close()  #파일을 닫는 코드를 명시해줬다.

 

문제339.

위의 예제를 파일을 닫는 f.close() 명시하지 않고

자동으로 닫히게 하시오 !

 

with open("d:\\stockcode_part.txt",'r') as f:

    for i in f.readlines():

        print(i)

 

설명: with~as 절을 사용하게 되면 f.close() 명시하지 않아도 되므로

프로그래머가 실수로 f.close() 작성하지 않아서 코드 실행할

메모리 부족 오류가 나는 것을 예방할 있다.

 

 

 

144. 파일의 특정 부분만 복사하기(seek, read, write)

"파일을 전부 copy 하는게 아니라 일부분만 copy 하는 방법"

 

예제:

spos=105  #파일을 읽는 위치를 지정-> 105 바이트 위치부터 읽겠다.

size=500   #읽을 크기를 지정-> 크기가 500바이트 까지 읽겠다.

 

 

spos=105

size=500

   

f=open('d:\\stockcode.txt','r')

h=open('d:\\stockcode_part.txt','w')       

 

f.seek(spos)

data=f.read(size)

h.write(data)

 

h.close()

f.close()

결과: 두산우  부터 출력된다. (spos 105 해서 거기부터 읽어옴)

 

**만약 f.seek(spos) 대신 f.read(spos) 하면

spos=105 까지 읽어오는걸로 작업실행 된다.

(성창기업\n000 까지 읽힘)

 

 

145. 파일 크기 구하기 (ospathgetsize)

 

from os.path import getsize

 

file1='d:\\stockcode.txt'

file2='d:\\16.png'

 

file_size1=getsize(file1)

file_size2=getsize(file2)

 

print('file name: %s file size: %d' %(file1,file_size1))

print('file name: %s file size: %d' %(file2,file_size2))

 

 

 

 

146. 파일 삭제하기(osremove)

예제:

from os import remove

target_file='d:\\stockcode_part.txt'

k=input('[%s] 파일을 삭제하겠습니까? (y/n)' %(target_file))

 

if k=='y':

    remove(target_file)

    print('[%s] 를 삭제했습니다.' %(target_file))

 

**휴지통에도 없다. 그냥 완전히 날라가버렸다.

   shift+delete 같은 작동이 일어난다

 

 

 

문제340. (점심시간 문제)

위의 코드를 가지고 파일명을 물어보게 하고

입력하면 해당 파일이 삭제가 되는 코드 작성하시오!

 

 

print(delete_file())

삭제하고 싶은 파일을 입력하세요~ d:\\mydata1.txt

 

 

def delete_file():

    from os import remove

    target_file = input('삭제하고 싶은 파일을 입력하세요 ~ ')

    k = input('[%s] 파일을 삭제하겠습니까?(y/n)' % target_file)

    if k == 'y':

        remove(target_file)

        print('[%s]를 삭제했습니다.' % target_file)

 

delete_file()

 

 


 

 

147. 파일이름 바꾸기(osrename)

 

예제:

from os import rename

target_file='d:\\stockcode.txt'

newname=input('[%s]에 대한 새로운 파일 이름을 입력하세요: '%(target_file))

rename(target_file,newname)

print('[%s]->[%s]로 파일이름이 변경되었습니다.' %(target_file, newname))

 


 

 

 

148.파일을 다른 디렉토리로 이동하기(osrename)

 

예제:

from os import rename

 

target_path = 'c:\\'

target_file = 'stockcode_part.txt'

 

newpath = input('[%s] 이동할 디렉터리의 절대경로를 입력하세요: ' %target_file)

 

if newpath[-1] == '/':

   newname = newpath + target_file

else:

   newname = newpath + '/' + target_file

 

try:

   rename(target_path + target_file, newname)

   print('[%s] -> [%s] 이동되었습니다.' %(target_file, newname))

except FileNotFoundError as e:

   print(e)

 

 

 

 

149. 디렉토리에 있는 파일목록 얻기(oslistdir)

 

 "딥러닝 사용할 데이터 전처리 코드 작성"

 

딥러닝 수업 사용할 코드가 크게 2가지

1. 이미지 데이터를 파이썬으로 로드하는 함수

2. 신경망 구현 함수

 

 

문제341.

폐사진 폴더에 있는 이미지들을 불러오는 함수 생성하시오.

 

import os

test_image='d:\\data\\image\\'

 

def image_load(path):

    file_list=os.listdir(path)

    return file_list

 

print(image_load(test_image))

 



 

내용들이 리스트에 담겨져서 출력됨

 

 

 

문제342.

위의 스크립트를 수정해서 png 떼버리고 아래와 같이 출력되게 하시오

 

import os

test_image='d:\\data\\image\\'

 

def image_load(path):

    import re

    file_list=os.listdir(path)

    x=[]

    for i in file_list:

        x.append(re.sub('[^0-9]','', i)) #숫자를 제외한 나머지를 정제하라

    return x

 

print(image_load(test_image))

 


 

 

 

문제343.

아래의 결과를 1,2,3,4,5.... 순으로 정렬되게 하시오

**csv 빼내고 int 해야 .

 

import os

test_image='d:\\data\\image\\'

 

def image_load(path):

    import re

    file_list=os.listdir(path)

    x=[]

    for i in file_list:

        x.append(int(re.sub('[^0-9]','', i)))

    x.sort()

    return x

 

print(image_load(test_image))

 

int 씌우면 앞자리 숫자만 보고 정렬시킴.

그래서 4000번대가 중간에 오고

900번대가 뒤로 오고 그러함.

 

 

 

문제344.

위의 예제를 이용해서 아래와 같이 결과가 출력되게 하시오

 

import os

test_image='d:\\data\\image\\'

 

def image_load(path):

    import re

    file_list=os.listdir(path)

   

    x=[]

    for i in file_list:

        x.append(int(re.sub('[^0-9]','', i)))

   

    x.sort()

   

    for j in x:

        print (str(j)+'.png',end=',')

   

   

image_load(test_image)

 

 


 

 

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

import os

 

def image_load(path):

    import re

    file_list=os.listdir(path)

    file_list.sort()

    return file_list

 

test_image='d:\\data\\image\\'

print(image_load(test_image))

 

이렇게 원래형태에서 바로 하면,  숫자 정렬이 안된다. (png 붙어있으니까)

 

 

 

문제345.

이미지 앞에 절대 경로가 아래처럼 붙게 하시오

 

import os

test_image='d:\\data\\image\\'

 

def image_load(path):

    import re

    file_list=os.listdir(path)

   

    x=[]

    for i in file_list:

        x.append(int(re.sub('[^0-9]','', i)))

   

    x.sort()

   

    for j in x:

        print (test_image+str(j)+'.png',end=',')

   

   

image_load(test_image)

 

 

문제346.

위의 이미지들을 딥러닝 신경망에 넣기 전의 데이터인 숫자배열로

만들기 위해서

cv2.imread 함수를 이용해서 list 변환하시오 !

 

아나콘다 프롬프트 열고

 install opencv

y

 

 

 

import cv2

import numpy

import re

import os

 

test_image='d:\\data\\image\\'  #주의! 사진 30 정도만 시도해볼 !!

 

def image_load(path):

    import re

    file_list=os.listdir(path)

   

    x=[]

    for i in file_list:

        x.append(int(re.sub('[^0-9]','', i)))

   

    x.sort()

   

    b=[]

    for j in x:

        b.append(test_image+str(j)+'.png')

   

    image=[]

    for z in b:

        img=cv2.imread(z)

        image.append(img)

   

    return image

 

image_load(test_image)

 

결과: 빨강,  녹색,  파랑



스파이더에서는 색없이 나오지만, 저렇게 색으로 출력된다.

 

 

 

150. 현재 디렉토리 확인하고 바꾸기 (osgetcwd, oschdir)

 

import os

pdir=os.getcwd()

 

print(pdir)

 

 


 

스파이더->tools->current working directory

 the following directory: 폴더그림 클릭

그러면 현재 디렉토리가 어디인지 확인가능하다 !

 

 


import os

os.chdir("c:\\")

print(os.getcwd())

 

다시 원위치

import os

os.chdir("C:\\Users\\stu")   #안되면 itwill

print(os.getcwd())

 

 

 

 

 

 

 

151. 디렉토리 생성하기(osmkdir) os.메이크디렉토리

 

import os

newfolder=input('새로 생성할 디렉토리 이름을 입력하세요:')

os.mkdir(newfolder)

 

 

 


 

현재 디렉토리에 내가 이름으로 폴더가 생성된다.

 

 

 

 

문제347.

위의 스크립트를 수정해서 폴더를 생성했으면

아래와 같이 결과가 출력되게 하시오

 

import os

pdir=os.getcwd()

 

newfolder=input('새로 생성할 디렉토리 이름을 입력하세요:')

os.mkdir(newfolder)

print('[%s] 에 [%s] 폴더가 생성되었습니다.' %(pdir, newfolder))

 

 

 

 

152. 디렉토리 제거하기 (osrmdir)  os.리무브디렉토리

예제:

d 드라이브 밑에 data7 이라는 폴더를 만들고 테스트 하시오

--------

data7 만들고 아래 코드 실행

 

import os

target_folder='d:\\data7'

os.rmdir(target_folder)

 

 

 

문제348.

다시 data7 폴더를 생성하는데 이번에는 폴더 생성 후에

파일을 넣은 후에 파이썬 코드로 삭제해보시오.

 

import os

target_folder='d:\\data7'

os.rmdir(target_folder)

  

: 안된다.

 

 

153. 하위 디렉토리 파일 전체 삭제하기(shutilrmtree) 서틸.리무브트리

 

#import os

import shutil

 

target_folder='d:\\data7'

shutil.rmtree(target_folder)

 

**하위 내용을 가지고 있던 data7 날라가는 있다.

 

 

 

154. 파일이 존재하는지 체크하기 (ospathexists)

 

d드라이브 밑에 data7 폴더를 생성한 후에 테스트 하세요

from os.path import exists

target_folder='d:\\data7'

exists(target_folder)

 

 

 

문제349.

아래와 같이 폴더를 생성하는 스크립트를 작성하는데

폴더가 이미 존재하면 이미 존재합니다 라는

메시지가 나오게 하시오

  

 

from os.path import exists

 

target_folder=input('새로 생성할 폴더 이름을 입력하세요~')

 

if exists(target_folder):

    print('폴더가 [%s] 이미 생성되었습니다.' %(target_folder))

else:

    print('폴더가 [%s] 새로 생성되었습니다.' %(target_folder))

 

 || 선생님답

from os.path import exists

 

target_folder=input('새로 생성할 폴더 이름을 입력하세요~')

 

if not exists(target_folder):

    os.mkdir(target_folder)

else:

    print('이미 존재합니다')

 

   

 

155. 파일인지 디렉토리인지 확인하기 (ospathisfile, ospathisdir)

 

 

예제:

import os

from os.path import exists, isdir, isfile

files=os.listdir()  # os.listdir() 적용시킨 files 제작

 

for file in files:  

    if isdir(file):

        print('DIR:%s' %(file))

   

for file in files:

    if isfile(file):

        print('File: %s' %(file))

 

 


  

 

 

문제350.(오늘의 마지막 문제)

오라클 next_day 함수를 파이썬으로 구현하시오

 

힌트:

weekday_dic['월요일']=0

weekday_dic['화요일']=1

weekday_dic['수요일']=2

    :                         :

    :                         :

 

결과:

print(next_day('2018-12-10', '수요일'))

 2018-12-12

 

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

dy=['월요일', '화요일', '수요일', '목요일', '금요일', '토요일', '일요일']

 

def next_day(date,dyy):

    from datetime import datetime as dd

    import datetime as d

       

    a=d.datetime.today().strptime(date,'%Y-%m-%d')

       

    b=dd.weekday(a)  # d.weekday(a) = 0//b=0//'월요일'

       

    dyy_b=''

    for i in range(len(dy)): #7

        if dy[i]==dyy:  # i=2

            dyy_b=i    #dyy_b=2

            break

               

    c=i-b #2-0

       

    return (a+d.timedelta(c))

   

       

print(next_day('2018-12-15','수요일'))


728x90
반응형