집에 있는 고데기가 작동을 하지 않습니다됐다 안됐다 하더니 이제는 아무런 반응이 없어서 살펴보니 플러그 부분 코드가 끊어져 있습니다이유를 생각해 보니 코드에 꽂고 사용하다 보내 길이가 짧아서 계속 꺾여서 그런 것 같습니다.


power_cable_recycle


아직 멀쩡하니 버리기 아까워 집에 남는 선들을 찾아보니 컴퓨터 파워 케이블이 10개는 되는군요컴퓨터는 버려도 케이블은 혹시나 하고 놔둔게 쌓여있어서 하나를 가져다 잘라 봤습니다.


power_cable_recycle


선이 3개이네요고데기는 2개 인데

녹색이 접지선 입니다.


power_cable_recycle


코드를 연결할 때 위 아래에 있는 부분이 접지 입니다.


power_cable_recycle


동그란 부분하고 접속해서 컴퓨터 사용하다 과부하로 감전이나 기기 고장을 방지하기 위한거죠.

어째든 이제 접지만 빼고 사용하면 되는거죠.


power_cable_recycle


녹색을 제외하고 피복을 벗겨 냅니다검은색 외부 피복을 놔둔 이유는 나중에 테이프를 감을 때 이걸 버팀목으로 사용하기 위해서 입니다.


power_cable_recycle


고데기 코드는 두 가닥 이니 이것도 벗겨서 갈색은 갈색과 청색은 청색과 연결을 하고 테이프를 감아 줍니다.


power_cable_recycle


피복을 놔두고 감았더니 좀 보기 흉하지만 집에서만 사용하기 때문에 별 문데 없습니다


power_cable_recycle


길이도 길어져서 편안하게 사용이 가능합니다.


 

opencv를 설치하고 테스트 하는 방법은 아주 다양 합니다저는 anaconda를 설치했기 때문에 그냥 숟가락 하나 더 놓기만 하면 되기 때문에 anaconda에서 테스트를 해보았습니다.


아나콘다 설치는 아래 링크를 참조 하세요.

아나콘다 설치 윈도우즈 7, 10 (Anaconda Version 5.2.0) - 201812



1. opencv 설치

 

Anaconda Prompt를 열고 명령어를 실행 합니다.  


anaconda_opencv_jupyter


 

설치는 명령어 하나면 완료 됩니다.

명령어도 다양한데 저는

 

conda install -c menpo opencv3

동일한데 설치 오류나면 이거

conda install --channel https://conda.anaconda.org/menpo opencv3

 

아니면

pip install opencv-python

또는 

pip install opencv-contrib-python

이것으로 설치를 진행 합니다.


anaconda_opencv_jupyter


중간에 진행 여부를 물어보면


anaconda_opencv_jupyter


y 하고 엔터


anaconda_opencv_jupyter


opencv가 설치 완료 되었습니다.

 

 

2. jupyter notebook 실행

 

시작 버튼에서 아나콘다 메뉴를 선택하고 jupyter notebook을 클릭 합니다.


anaconda_opencv_jupyter


주피터 노트북이 열리면 파일을 하나 새로 만들어 줍니다설치 버전에 따라 Python 3이 아니고 Python 2인 경우도 있을 텐데 관계 없습니다.


anaconda_opencv_jupyter


코딩을 하고 상단 Run을 클릭 합니다.


anaconda_opencv_jupyter


소스는 글씨가 너무 작나요? 인터넷에 바글바글하게 있긴 한데 아래와 같습니다.


import cv2

 

img = cv2.imread('F:/tensordata/number/num3.png')

cv2.imshow('image',img)

cv2.waitKey(0) 

cv2.destroyAllWindows() 


실행을 하면 새 창이 뜨면서 이미지를 볼 수 있습니다.


anaconda_opencv_jupyter


 

8. 파일 입력 출력

 

8.1 파일 함수와 옵션

 

파일 오픈 함수는 생각보다 많은 매개변수가 있습니다.

open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

파일을 오픈 하기 위해 주로 사용하는 것은

- filename은 필수로 입력 합니다.

- mode r(읽기), w(쓰기), a(추가하기) 중 하나를 기입하고

- t(텍스트) b(바이너리)도 입력해야 하는데 생략시 t default로 설정됩니다.

- encoding은 생략시 utf-8로 설정 됩니다.

- 나머지는 필요에 따라 선택적으로 적용 합니다.

 

모드는 여러 가지의 조합으로 사용 됩니다.

모드

의미

r

읽기파일을 읽기 위해 오픈 (default). 파일 없으면 오류

w

쓰기파일을 쓰기모드로 오픈. 파일 없으면 생성, 있으면 삭제 생성

x

open for exclusive creation, failing if the file already exists

a

쓰기끝에 추가, 없으면 생성

b

이진 모드

t

텍스트 모드 (default)

+

업데이트용 파일 오픈 (읽기, 쓰기 가능)

 r+

읽기 또는 쓰기, 파일 없으면 오류. 파일 있으면 처음에 추가

 w+

읽기 또는 쓰기, 파일 없으면 생성. 파일 있으면 삭제 후 생성

 a+

읽기 또는 추가, 파일 없으면 생성. 파일 있으면 끝에 추가


python study

 


8.2 파일 생성 및 쓰기

 

f = open(“file_name”, ‘w’)

파일을 쓰기모드(w)로 열면 파일이 존재하지 않는 경우 새로 생성이 되지만 기존에 파일이 존재하는 경우 기존 파일 내용을 삭제하고 새로 쓰기를 하게 됩니다.

 

8.2.1 write() 함수

 

write(data) 함수는 data를 파일에 모두 출력 합니다. 

sum = 0

f = open("F:/Python/file_write01.txt", 'w')

for i in range(1,101):

           sum += i

           tmp_data = "sum( %d ) = %d + %d\n"  % (sum , sum, i)

           f.write(tmp_data)

 

print(sum)

f.close()

(base) F:\Python>python file_w01.py

5050

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

sum( 28 ) = 28 + 7

sum( 36 ) = 36 + 8

sum( 45 ) = 45 + 9

....(생략)

 

list를 파일로 출력하려면 문자열로 변환하여 출력 하여야 합니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write02.txt", 'w')

 

f.write('\n'.join(list_data))

 

f.close()

(base) F:\Python>python file_w02.py

aaaa

bbbb

cccc

 

 

8.2.2 writelines() 함수

 

writelines 함수를 이용하면 리스트 형태의 자료를 파일로 출력 가능 합니다.  단점은 모두 한줄로 결합되어 출력이 됩니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write03.txt", 'w')

 

f.writelines(list_data)

 

f.close()

(base) F:\Python>python file_w03.py

aaaabbbbcccc

 

 

8.3 파일 읽기

 

파일을 읽기 모드(r)로 오픈 하는 경우 파일이 존재 하지 않으면 오류가 발생 하므로 try ... except를 사용하여 오류 처리를 하거나 존재 유무를 확인 하고 읽기 모드로 오픈 합니다.

 

8.3.1 read() 함수

 

read(size)의 형태로 사용되면 size를 생략하면 파일을 하나의 문자열로 리턴 합니다.  문제는 파일의 크기가 가용 메모리 범위를 넘어가면 안되기 때문에 size가 큰 파일은 나누어서 읽기를 추천 합니다.  파일의 끝에 도달하면 빈 문자열(‘’)을 리턴 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

전체 읽기

(base) F:\Python>python file_r01.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

...(생략)

 

read(size)를 이용하여 파일 읽기. size 만큼 읽어와 출력 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read(100)

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

100 byte 읽기

(base) F:\Python>python file_r02.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) =

 

 

8.3.2 readline() 함수

 

열린 파일을 한 라인씩 읽어오는 함수 입니다.  한 라인씩 읽어 오는 동안 계속 해서 읽어올 라인이 없는지 확인 하고 없으면 break로 종료 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.readline()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

한라인만 읽어와 출력 합니다.

(base) F:\Python>python file_r03.py

sum( 1 ) = 1 + 1

 

 

8.3.3 readlines() 함수

 

파일을 한꺼번에 읽어서 각 라인을 리스트 형태로 반환하는 함수 입니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data_list = f.readlines()

   data_length = len(data_list)

   print("list count : " + str(data_length))

   print(data_list[0])

   print(data_list)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

파일의 라인 수와 List의 첫 번째 요소, 전체 출력

(base) F:\Python>python file_r04.py

list count : 100

sum( 1 ) = 1 + 1

 

['sum( 1 ) = 1 + 1\n', 'sum( 3 ) = 3 + 2\n', 'sum( 6 ) = 6 + 3\n', ...(생략)...]



 

8.4 + 사용


개인적으로는 ‘+’를 붙여 사용 하는 것보다 원래의 기능대로 사용하길 추천 합니다.

 

8.4.1 r+


mode‘r+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 존재하지 않으면 오류를 발생 하고특별히 위치를 정하지 않는다면 파일의 처음에 추가가 됩니다.

try:

   f = open("F:/Python/file_write02.txt", 'r+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkka

bbbb

cccc

 

 

8.4.2 w+


mode‘w+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 생성 하고 파일이 존재 하면 내용을 삭제하고 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", 'w+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkk

 

 

8.4.3 a+


mode‘a+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 오류가 발성 하고 파일이 존재 하면 내용의 끝에 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", "a+")

  

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

aaaa

bbbb

cccckkk


- copy coding -

 

7. 예외처리

 

코딩을 할 때 가장 중요한 건 오류가 발생하지 않도록 하는 것 이지만 데이터의 오류, 시스템 오류, 네트워크 오류는 어쩔 수가 없습니다.  오류를 예측하고 거기에 대한 대응을 미리 해놓을 수 있는 능력이 더 중요할 수 있습니다.

 

7.1 try ... except


try 블록을 실행 하는 동안 오류가 발생하면 곧바로 except 블록이 실행 되며 오류가 발생하지 않는다면 except 블록은 실행되지 않습니다.

 

7.1.1 발생오류를 모르는 경우

 

발생할 오류의 항목을 모르는 경우 오류 항목을 기입하지 않고 except만 적어서 처리를 하는 경우 입니다.

try:

   이런 저런 명령어 처리

except:

   print(“알 수 없는 오류로 인하여 프로그램이 종료 되었습니다.”)

 

python study

 


7.1.2 발생오류 명기


try 블록에서 발생할 오류에 대해 예상이 가능한 경우 오류 항목을 추가하여 처리하는 경우 입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

 

발생할 수 있는 오류가 여러 개인 경우 except를 추가 합니다. 

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

except:

 print(“알 수 없는 오류가 발생 했습니다.”)

 

 

7.1.3 else (오류 없는 경우)

 

try 블록을 실행하는 동안 오류가 발생하지 않은 경우에만 실행을 하는 블록 입니다.  finally와의 차이점은 finally는 오류가 발생 해도 실행을 하는 블록 입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

except:

 print(“알 수 없는 오류가 발생 했습니다.”)

else:

   print(“오류가 발생하지 않았습니다.”)

 

 

7.1.4 pass (예외상황 회피)

 

예외 상황이 발생 했을 때 프로세스를 중단 하지 않으면서 예외사항을 무시하고 다음 단계로 넘어가기 위한 방법으로 아무일 없었다는 듯 하단 명령을 실행 합니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   pass

 

 

7.1.5 as (오류 클래스 축약)

 

오류 클래스 명이 긴 경우 as를 이용하여 짧은 이름의  alias에 대입 하여 사용할 수 있습니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError as oe:

   print(oe)

except FileNotFoundError as e:

   print(e)

 

 

7.1.6 finally (무조건 실행)

 

try 블록을 실행 하는 동안 오류가 발생해서 프로그램이 종료 되더라도 꼭 실행을 해야 하는 명령어를 finally 블록에 추가 합니다.  대부분 리소스를 반납해야 하는 close 문들입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

finally:

   fd.close()

 

 

 

7.2 예외 만들기

 

raise를 이용하면 사용자가 임의로 예외를 발생시킬 수 있습니다.


7.2.1 내부 예외 클래스 호출


내부에 정의된 예외사항을 사용자가 임의로 호출하여 사용할 수 있습니다.

a = 100

 

if a <= 150:

           try:

                     raise ValueError

                     b = 2500 / a

           except ZeroDivisionError:

                     print("zero div")

           except ValueError:

                     print("number small")

결과

(base) F:\Python>python except001.py

number small

 

7.2.2 사용자 정의 예외 클래스 호출


사용자가 직접 Exception 클래스를 상속받아 새로운 예외 클래스를 생성하여 호출할 수 있습니다.

class UserError(Exception):

           def __init__(self, value):

                     self.value = value

           def __str__(self):

                     return self.value

 

# 신규 예외사항 사용

a = 100

 

if a <= 150:

           try:

                     raise UserError("Number error")

                     b = 2500 / a

           except ZeroDivisionError:

                     print("zero div")

결과

(base) F:\Python>python except002.py

Traceback (most recent call last):

  File "except002.py", line 12, in <module>

    raise UserError("Number error")

__main__.UserError: Number error

 

 

7.3 with

 

with문은 예외처리 라기 보다는 미리 후선 마무리 작업이 정의되어 있는 명령어 입니다.

with open(“filename.txt”) as fd:

    for line in fd:

        print(line, end="")

 

with문은 Object.enter를 호출하고 자동으로 Object.exit를 호출 하도록 만들어진 것으로 별도의 처리를 해주지 않아도 됩니다.

 

 

7.4 Exception 구조 (Python 3.7)

 

파이썬 내장 예외사항 클래스 계층 구조 입니다.  필요한 예외사항이 있으면 사용하면 됩니다.

BaseException

 +-- SystemExit

 +-- KeyboardInterrupt

 +-- GeneratorExit

 +-- Exception

      +-- StopIteration

      +-- StopAsyncIteration

      +-- ArithmeticError

      |    +-- FloatingPointError

      |    +-- OverflowError

      |    +-- ZeroDivisionError

      +-- AssertionError

      +-- AttributeError

      +-- BufferError

      +-- EOFError

      +-- ImportError

      |    +-- ModuleNotFoundError

      +-- LookupError

      |    +-- IndexError

      |    +-- KeyError

      +-- MemoryError

      +-- NameError

      |    +-- UnboundLocalError

      +-- OSError

      |    +-- BlockingIOError

      |    +-- ChildProcessError

      |    +-- ConnectionError

      |    |    +-- BrokenPipeError

      |    |    +-- ConnectionAbortedError

      |    |    +-- ConnectionRefusedError

      |    |    +-- ConnectionResetError

      |    +-- FileExistsError

      |    +-- FileNotFoundError

      |    +-- InterruptedError

      |    +-- IsADirectoryError

      |    +-- NotADirectoryError

      |    +-- PermissionError

      |    +-- ProcessLookupError

      |    +-- TimeoutError

      +-- ReferenceError

      +-- RuntimeError

      |    +-- NotImplementedError

      |    +-- RecursionError

      +-- SyntaxError

      |    +-- IndentationError

      |         +-- TabError

      +-- SystemError

      +-- TypeError

      +-- ValueError

      |    +-- UnicodeError

      |         +-- UnicodeDecodeError

      |         +-- UnicodeEncodeError

      |         +-- UnicodeTranslateError

      +-- Warning

           +-- DeprecationWarning

           +-- PendingDeprecationWarning

           +-- RuntimeWarning

           +-- SyntaxWarning

           +-- UserWarning

           +-- FutureWarning

           +-- ImportWarning

           +-- UnicodeWarning

           +-- BytesWarning

           +-- ResourceWarning

 

- copy coding -


1···81828384858687···118

+ Recent posts