Python & MicroPython メモ

Python / OCR処理 / pyocr、tesseract-ocr

tesseract-ocrは、パスを環境変数として登録しておく(登録後はPCを再起動する)。 pyocrは、C:\ProgramData\Anaconda3\Lib\site-packages\pyocr\tesseract.pyファイルを下のように変更しておく。 from: return "--psm" if version[0] > 3 else "-psm" to: ret…

Python / pipでインストールしたモジュールの場所その他を確認する / pip show <モジュール名>

Python / zipファイル内のファイル名を取得する / zipfile.ZipFile(ファイルパス).namelist()

.zipファイルであれば拡張子は.zipでなくてもよい。ここでは.xlsxファイルを展開してみる。 from pprint import * import zipfile with zipfile.ZipFile("H:\\img\\sute\\2018.xlsx") as files: # zipファイルを開いて、 names = files.namelist() # zipファ…

Python / 同じディレクトリーにあるファイルの名前を取得する / glob.glob(ファイルパス)

import glob files = glob.glob("H:\\sute\\*") # ファイル名を全部取得する。 print(files) files = glob.glob("H:\\sute\\*.pdf") # 拡張子を指定してファイル名を取得する。 print(files) 実行結果:

Python / パスを一時的に追加してモジュールをインポートする

# たとえばAnacondaプロンプトでpipしてインストールしたtablibをインポートする。 import sys sys.path.append("C:\\ProgramData\\Anaconda3\\lib\\site-packages") import tablib 実行結果:

Python / 排列をExcelに書き出す / tablib

import tablib terms = [["英" , "日"], ["one" , "一"], ["two" , "二"], ["three", "三"],] sheet = tablib.Dataset(*terms) open("H:/glossary/1.xls", "wb").write(sheet.xls) 実行結果:

Python / Excelファイルを読み込んでセルの値を読み込む / xlrd

import numpy as np import xlrd book = xlrd.open_workbook("H:\img\Book1.xlsx") # Excelファイルを読み込む。相対パスでもよい。 sheet = book.sheet_by_index(0) # 読み込んだファイルの1シート目を読み込む。インデックスは0ベース。 tbl = np.empty([2…

Lua、Python / 排列を逆順に並べ換える

Luaの場合: function table.reverse(tbl) local len = #tbl local temp = {} for i = len, 1, -1 do temp[#temp+1] = tbl[i] end return temp end -- test -- do local lst = {"a", "b", "c", "d"} local rev = table.reverse(lst) print(table.concat(rev, …

ループを回さずに複数の函数に一斉に同じ引数を渡す / numpy.frompyfunc()

numpy に用意されている函数はユニバーサル函数であるので、引数として渡された排列に含まれている複数の値が一斉に処理される。numpy に用意されていない函数 (自作函数を含む) であっても numpy.frompyfunc() を使えばユニバーサル函数に変換できる。明示…

最小二乗法 / N 次函数近似 / numpy.polyfit()

Python の場合は numpy.polyfit() を使えば簡単に近似多項式が求まる。 構文: numpy.polyfit([x 軸の点列], [y 軸の点列], 次数) 返値: N 次 ~ 0 次の順番に係数の並んだリスト import matplotlib.pyplot as plt import numpy as np import sympy as sym x …

文字列の書式指定 / %、format()

参考: Programming the BBC micro:bit: Getting Started with MicroPython, p.67 The Official BBC micro:bit User Guide, p.144-145 a, b = "hello", "world" c, d = "pine", "apple" print("%s" % a) print("%s, %s" % (a, b)) # 文字列オブジェクトに for…

matplotlib / pyplot, lines / 単振り子を描く Polygon(), Circle(), Line2D()

from matplotlib import pyplot as plt from math import sin, cos, pi def createPend(length, radian): x = length * sin(radian) y = length * cos(radian) line = plt.Polygon(((0,0), (x,y)), closed=False, color="black") circle = plt.Circle((x,y),…

matplotlib / pyplot / 一定時間ごとに何かを動かす FuncAnimation()

参考: Pythonからはじめる数学入門, p.163-165 from matplotlib import pyplot as plt from matplotlib import animation from math import sin def createCircle(): return plt.Circle((0,0), 1) def movePos(i, circle): # i はフレーム番号。 circle.cent…

matplotlib / pyplot / 一定時間ごとに何かをする FuncAnimation()

from matplotlib import pyplot as plt from matplotlib import animation def frameNum(i): # i はフレーム番号 print(i) fig = plt.gcf() # FuncAnimation オブジェクトは、何かの変数に代入しておかないとガーベジコレクションされてしまう。 sute = anim…

matplotlib / pyplot / 何か図形を描く Polygon(), Circle()

線を描くときはたとえば下のようにする。 import matplotlib.pyplot as plt ax = plt.gca() ax.set_aspect("equal") line = plt.Polygon(((0,0), (5,5), (0,10)), closed=False, fill=False, color="r", linewidth=5) ax.add_patch(line) plt.axis("scaled")…

matplotlib / pyplot / グラフを描く plot()

import matplotlib.pyplot as plt def drawGraph(xList, yList, marker): plt.plot(xList, yList, marker=marker) plt.show() xList = range(-10, 10+1) yList = [x**2 for x in xList] drawGraph(xList, yList, "o")

matplotlib / pylab / グラフを描く plot() / y 軸の値だけ与えた場合

y 軸の値だけ与えた場合は x 軸には y リストのインデックスが使われる。 from pylab import plot, show yList = [50,40,30,20,10,0] plot(yList, marker="o") show() from pylab import plot, show yList = [50,40,30,20,10,0] # x 軸を 0 から始めたくない…

matplotlib / pylab / グラフを描く plot() / マーカーを描く

from pylab import plot, show xList = [x for x in range(-5, 5+1)] yList0 = [x**2 for x in xList] yList1 = [x for x in xList] plot(xList, yList0, "o") # マーカーだけ描く。 plot(xList, yList1, marker="x") # マーカーと線と両方描く。 show()

matplotlib / pylab / グラフを描く plot()

from pylab import plot, show xList = [x for x in range(-5, 5+1)] yList = [x**2 for x in xList] plot(xList, yList) show()

tkinter / 一定時間ごとに何かをする window.after(ミリ秒, 函数)

from tkinter import * from time import * window = Tk() window.geometry("318x212") period = 2000 def showClock(): print(int(clock())) window.after(period, showClock) # showClock() を実行すると、 # 直後に print() が実行され、 # 一定時間後に…

tkinter / クリックした座標を取得する

import tkinter as tk def ButtonPress1(event): print("clicked at ", end="") print(event.x, event.y) # ウィンドウを設定する。 W = 318 H = 212 window = tk.Tk() window.geometry(str(W)+"x"+str(H)) # 描画領域を設定する。 gc = tk.Canvas(window, w…

tkinter / 何かを描く

import tkinter as tk # ウィンドウを設定する。 W = 318 H = 212 window = tk.Tk() window.geometry(str(W)+"x"+str(H)) #描画領域を設定する。 gc = tk.Canvas(window, width=W, height=H) gc.place(x=0, y=0) #何かを描く。 gc.create_oval(0, 0, H, H) #…

内包表記 / 三角行列を作る

mat = [[0 for c in range(r+1)] for r in range(5)] for i in range(len(mat)): print(mat[i]) ――――――――――――――――――――――――――――――― Lua の場合: mat = {} for r = 1, 5 do mat[r] = {} for c = 1, r do mat[r][c] = 0 end end for i = 1, #mat do print("{"..…

tkinter / ウィンドウを表示する

参考: いちばんやさしい Python入門教室, p153-180 import tkinter as tk import tkinter.messagebox as msg def onButton(): # ボタンが押されたときに実行する函数を定義する。 text = entryBox.get() # エントリーボックスに入力されたテキストを取得する…

内包表記 / 1 行の行列を 1 列の行列にする

# 1 行の行列を 1 列の行列にする。 a=[0, 10, "aa", -3, 3.65] b=[[v] for v in a] print(a) print(b)

存在しないインデックスを参照したときに None を返すようにする。

# リストに存在しない要素を参照したときに None を返すようにする。 table = [0,1,2,3,4] def safeAccess(table, index, default=None): try: if index < 0: return default else: return table[index] except: return default for i in range(-3, 7): prin…

リストのコピー

# 別の変数に代入しただけではコピーにならない。 a = [0,1,2,3,4] b = a a[1] = 99 print(b) # リストのコピーには copy() メソッドを使う。 a = [0,1,2,3,4] b = a.copy() a[1] = 99 print(b) # リスト全体を切り出してもよい。 a = [0,1,2,3,4] b = a[:] …

内包表記 / 行列を作る

内包表記が使える。 row = 2 col = 3 init = None mat = [[init for i in range(col)] for i in range(row)] print(mat) ――――――――――――――――――――――――――――――――――――――― Lua の場合: row = 2 col = 3 init = 9 mat = {} for r = 1, row do mat[r] = {} for c = 1,…

ジェネレーター

# return ではなく yield を使う。 def gene(a): yield a*2 yield a**2 yield a+100 for v in gene(10): print(v) # 普通の函数としては使えない。 g = gene(10) print(g)

可変長引数 / 假引数をタプル引数にする

# 假引数をタプル引数にする。 def sum(*args): sute = 0 for v in args: sute += v return sute a = sum(1, 2, 3, 4, 5) print(a) ――――――――――――――――――――――――――――――――― Lua の ... と同じ。