Python으로 text 파일을 열어서 처리를 하려고 하는데, 이상한 데이터(예를 들면 0xff)가 읽힌다는 에러가 발생하기도 합니다.

 

[error] encoding : utf8, message : 'utf-8' codec can't decode byte 0xff in position 8: invalid continuation byte

 

이때 utf8, cp949, euc-kr등으로 변경하라는 가이드가 많이 보입니다.

제가 사용한 text 파일들은 이런 방법으로도 문제가 계속 발생했습니다.

 

python3의 경우, errors = ignore 옵션을 추가하면 문제가 해결되었습니다.

open(path, 'r', encoding='utf-8', errors='ignore')

관련 링크들입니다.

https://stackoverflow.com/questions/30700166/python-open-file-error

 

python open file error

I am trying to open some file and I know there are some errors in the file with UTF-8 encoding, so what I will do in python3 is open(fileName, 'r', errors = 'ignore') but now I need to use pyth...

stackoverflow.com

https://stackoverflow.com/questions/12468179/unicodedecodeerror-utf8-codec-cant-decode-byte-0x9c

 

UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c

I have a socket server that is supposed to receive UTF-8 valid characters from clients. The problem is some clients (mainly hackers) are sending all the wrong kind of data over it. I can easily

stackoverflow.com

- End -

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 디버깅  (0) 2020.05.03
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03
[Python] matplotlib 예제  (0) 2020.05.03

Python으로 프로그래밍을 하다 보면, 반복해서 수행하는 함수나 loop등에서 변수들의 상태를 모니터링하고 싶은 경우가 많습니다. 물론 print 함수를 이용해서 하나 하나 trace할 수도 있지만, Python이 제공하는 디버깅 기능을 이용하면 좋습니다.

기본적인 예제는 다음과 같습니다.

from IPython.core.debugger import set_trace

sum = 0

for i in range(10):
    sum += i
    set_trace()

set_trace()가 동작할 때는 jupyter notebook에 아래와 같은 입력창이 활성화됩니다.

입력창에 필요한 디버깅 command를 입력하거나, 확인하고자 하는 변수를 입력하고 enter를 눌러 결과를 확인할 수 있습니다.

디버깅 command와 관련해서는 입력창에 'help'를 입력하면 아래와 같이 사용가능한 command들이 나타납니다. 그리고 디버깅 command에 대해서 좀 더 확인하고 싶으면, 'help command명'을 입력하면 설명을 확인할 수 있습니다.

아래는 위의 예제를 실제 실행하면서, i와 sum 변수를 중간 중간 출력한 화면입니다. 출력 이후 다시 실행하기 위해서는 'c' 명령을 입력하였습니다. 마지막으로 디버깅을 멈추기 위해서는 'q'를 입력했습니다.

 

만약 'q'를 입력해서 프로그램을 종료하지 않은 상태로, jupyter notebook의 다른 명령을 실행시키는 경우 실행이 종료되지 않습니다. 이 경우 해당 notebook을 'Shutdown'후 다시 실행하면 됩니다.

- End -

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Unicode error  (0) 2021.11.23
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03
[Python] matplotlib 예제  (0) 2020.05.03

일련의 규칙에 맞춰 폴더를 생성하는 예제와 tar 파일을 extract하는 예제입니다.

import tarfile
import os

# 폴더 생성 예제
# Linux의 경우 '/'로 시작해야 하며, '~'로 home page를 표시할 수는 없음
srcFolderName = os.path.join('/home','apple', 'Downloads')
for i in range(1, 14):
    # Documents 폴더에 'Output_01', 'Output_03', ... , 'Output_13'을 생성
    dstFolderName = os.path.join('/home','apple', 'Documents', 'Output_'+'%02d'%i)
    
    # 예외 처리
    try:
        if not(os.path.isdir(dstFolderName)):
            os.makedirs(os.path.join(dstFolderName))
    except OSError as e:
        if e.errno != errno.EEXIST:
            print("Failed to create directory!!!!!")
            raise

" srcFolder에 있는 summary.tar.bz2 파일을 dstFolder에 extract
tar = tarfile.open(os.path.join(srcFolderName, 'summary.tar.bz2'), "r:bz2")
tar.extractall(dstFolderName)
tar.close()
반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Unicode error  (0) 2021.11.23
[Python] 디버깅  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03
[Python] matplotlib 예제  (0) 2020.05.03

Animation 예제입니다.

(참고링크)

import numpy as np
import matplotlib.pyplot as plt
import math
import matplotlib.animation as animation

def B(alpha, beta):
    return math.gamma(alpha) * math.gamma(beta) / math.gamma(alpha + beta)

def beta_pdf(x, alpha, beta):
# [0, 1] 구간 밖에서는 밀도가 없음
    if x < 0 or x > 1:
        return 0
    return x ** (alpha - 1) * (1 - x) ** (beta - 1) / B(alpha, beta)

x_data = []
y_data = []

fig, ax = plt.subplots()
ax.set_xlim(0, 1)
ax.set_ylim(0, 12)
line, = ax.plot(0, 0)

def animation_frame(i):
    xs = [x / 100.0 for x in range(0,100)]

    x_data = [x / 100.0 for x in range(0,100)]
    y_data = [beta_pdf(x, alpha=i,beta=i+10) for x in xs]

    line.set_xdata(x_data)
    line.set_ydata(y_data)

    return

anim = animation.FuncAnimation(fig, func=animation_frame, frames=np.arange(0.1, 80, 1), interval=50, repeat=False)
plt.show()

Jupyter notebook에서 예제를 시험할 때, animation이 동작하지 않을 수 있습니다.

이 경우에는 아래 코드를 먼저 실행한 후, 위 코드를 수행하면 animation 동작을 확인할 수 있습니다.

(참고링크)

%matplotlib notebook

 

 

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Unicode error  (0) 2021.11.23
[Python] 디버깅  (0) 2020.05.03
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] matplotlib 예제  (0) 2020.05.03

가장 기본적인 matplotlib 예제입니다.

# 필요한 라이브러리 import
import numpy as np
import matplotlib.pyplot as plt

# x = in_array, -np.pi ~ np.pi 30단계
# y = out_array, sine
in_array = np.linspace(-np.pi, np.pi, 30)
out_array = np.sin(in_array)

# plot reset
plt.clf()

# x, y축 range 지정
plt.ylim([-1.2, 1.2])
plt.xlim([0.0, 30.0])

# plot에 좌표(15, -0.5)에 text 추가
plt.text(15, -0.5, "Insert text")

# plot에 가로선 그리기 (red, 모양, 굵기)
plt.axhline(out_array.max(), color='r', linestyle ='--', linewidth=1)
# plot에 세로선 그리기 (blue, 모양, 굵기)
plt.axvline(np.argmax(out_array), color='b', linestyle='--', linewidth=1)

# plot 그리기
plt.plot(out_array)

# plot 보이기
plt.show()

실제 그린 그림입니다.

- End -

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Unicode error  (0) 2021.11.23
[Python] 디버깅  (0) 2020.05.03
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03

Python으로 이것 저것을 시험해 보려고 virtualenv 환경을 사용하고 있습니다.

Command line으로도 사용하고, jupyter를 사용하기도 합니다.

윈도우 환경에서 그때 그때 명령어를 모두 입력하기 귀찮아서, bat 파일을 사용하고 있는데, 사용하는 batch 파일을 정리해 보았습니다.

기본적으로 윈도우용 batch 파일 관련 블로그(참고링크)를 참고했습니다.

 

전체코드는 아래와 같습니다.

set argc=0

for %%x in (%*) do Set /A argc+=1

if %argc% == 1 (
	if "%1"=="jupyter" (
		call venv\scripts\activate
		jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
	)
) else (
	call venv\scripts\activate
)

:virtualenv venv
:virtualenv venv --python=python3
:pip freeze > requirements.txt
:pip install -r requirements.txt

 

[내용]

 

batch 파일의 argument로 'jupyter'를 입력하면, virtualenv 환경 activate하고, jupyter를 실행합니다. (Jupyter 실행 환경)

Jupyter를 실행할 때 파일 크기가 큰 이미지를 불러올 때 문제가 발생하는 경우가 있었습니다. 그래서 Jupyter를 실행할 때 iopub_data_rate_limit의 값을 변경해서 실행했습니다.(참고링크)

Argument 없이 batch 파일을 실행하면 virtualenv 환경만 activate합니다. (Command line 실행 환경)

if %argc% == 1 (
	if "%1"=="jupyter" (
		call venv\scripts\activate
		jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
	)
) else (
	call venv\scripts\activate
)

 

그리고, 실행되지는 않지만, 주석으로 가끔 사용하는 명령어들을 적어 두었습니다.

최초 virtualenv 설치를 위한 명령입니다.

python2를 사용하는 경우와 python3를 사용하는 경우가 틀려서 따로 적어두었습니다.

:virtualenv venv
:virtualenv venv --python=python3


virtualenv 환경에서 설치한 package들을 백업하거나 재설치하기 위한 명령어들을 적어두었습니다.

:pip freeze > requirements.txt
:pip install -r requirements.txt

[End]

반응형

리눅스 Python 3.5.3 환경에서 Tensorflow를 'pip install tensroflow'로 설치 후 MNIST 예제를 실행하기 위해서 아래 코드를 수행했습니다.

# MNIST 데이터를 다운로드 한다.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

그런데 아래와 같은 에러가 확인됩니다.

ImportError: No module named 'tensorflow.examples.tutorials'

Python 2.x 버전으로 변경해 봐도 동일한 문제가 확인됩니다.

 

아래 명령어를 이용해서 설치된 tensorflow의 버전을 확인해 보면, version 2.0을 사용하고 있습니다.

>>> import tensorflow as tf
>>> tf.__version__

virtualenv 환경을 이용해서 시험했는데, venv 폴더 하위에서 mnist 관련 examples 폴더는 없었습니다. github에서 tensorflow version 2.0을 살펴보면 example 폴더가 정상적으로 존재하는 것은 확인했습니다. 다운로드만 되지는 않은 것으로 보입니다.

 

다시 시험을 위해서 모두 지우고, virtualenv 환경을 다시 한번 셋업했습니다. 이번에는 Python 3.5 버전에 맞는 tensorflow를 아래 명령어를 이용해서 직접 설치했습니다. (https://www.tensorflow.org/install/pip 참조)

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.14.0-cp35-cp35m-linux_x86_64.whl

이후에는 MNIST 다운로드가 실행되었습니다.

 

Tensorflow version을 확인해 보면 "1.14.0"으로 확인되었으며, 아래와 같이 input_data.py 파일도 확인할 수 있었습니다.

./venv/lib/python3.5/site-packages/tensorflow/examples/tutorials/mnist/input_data.py

정확한 이유는 알기 어렵지만, python 3.5.x와 관련해서는 tensorflow version 2.0이 아닌 1.14.0으로 해야 example import 에러를 회피할 수 있는 것으로 생각됩니다. github에서 tensorflow version 2.0에 example 폴더가 정상적으로 존재하므로, github에서 직접 다운로드하는 해결책이 있을 것으로 보이지만, 진행해 보지는 않았습니다.

반응형

+ Recent posts