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

+ Recent posts