Python3関連のことを調べてみた2021年12月07日

Python3関連のことを調べてみた2021年12月07日

[Python]デフォルト値を持つ引数の前にはアスタリスクを設けておくと堅牢で良いかも、という話

# TL;DR

Pythonでデフォルト値を取る引数に関してはその前にアスタリスク(`*`)の引数設定があるとキーワード引数を前提とする縛りを設けられて引数順や引数の追加などをした際に影響が少なくて堅牢で良さそう、という話です。

# きっかけ

先日タイムラインに以下のようなツイートが流れてきて拝見しました。

【Python】dhash実装【OpenCV】

## はじめに
OpenCV Pythonを使ってdhashを利用した画像の類似度計算を行いたかったのですが、メソッドが存在しなかったため手実装しました。
OpenCVとnumpyを利用しています。

## ライブラリに頼る場合
https://pypi.org/project/dhash/
というライブラリがあるようです。
実装もこれを参考にしました。

## 実装方法
上記ライブラリの実装を見てみます。

– Convert the image to grayscale
– Downsize it to a 9×9 thumbnail (size=8 means an 8+1 by 8+1 image)
– Produce a 64-bit “row hash”: a 1 bit means the pixel intensity is increasing in the x direction, 0 means it’s decreasing
– Do the same to produce a 64-bit “column hash” in the y direction

元記事を表示

AsanaのAPIを使ってタスクのストーリー(アクティビティ)までを取得してみる

こんにちは。

これはHameeの2021年のアドベントカレンダー、6日目の記事です。

https://qiita.com/advent-calendar/2021/hamee

同じくアドベントカレンダーの @yamamoto_hiroya さんの[4日目の記事](https://qiita.com/yamamoto_hiroya/items/4063e8b31c2ecd9193c7)にもあるのですが、この11月からHameeの開発部署のプロジェクト管理をRedmineからAsanaに変更しました。その関係で、旧来できていた運用の再現や、手間をはぶく新しい運用の適用やツールの作成が急ピッチで進められていました。

https://qiita.com/yamamoto_hiroya/items/4063e8b31c2ecd9193c7

そしてタスクのステータスをAsana上のセクションで管理するようになったのですが、あるとき、そのタスクの差し戻し回数や、保留されている時間を知り、プロジェクト管理の見える化をはかろうとしました。ここではそのためにおこなったAsanaのAPIの疎通方法

元記事を表示

SVGベースのPythonフロントエンドライブラリを作っているという話

# TL;DR

今年からPythonで書けるapyscという名前のSVGベースのフロントエンドライブラリを作り始めたのでその1年のまとめです。

どんなライブラリなのか、何故作っていっているのか、現在どこまでできるようになったのか、その他使い方の詳細や今後どの辺を実装していこうと考えているのかなどについて触れていきます。

# ライブラリ基本情報

GitHub:

https://github.com/simon-ritchie/apysc

ドキュメント:

https://simon-ritchie.github.io/apysc/index.html

PyPIに登録済みのため以下のようにpipでさくっとインストールすることができます(Python 3.6以降をサポートしています)。

“`
$ pip install apysc
“`

※本記事では執筆時点で最新の0.55.9のバージョンを使っていきます。

“`
$ pip install apysc==0.55.9
“`

# どんなライブラリなのか(現在までにできるようになっていること)

## 様々なSVG

元記事を表示

AWS Lambda + S3 + Python で PDF を扱う際のTips

# 初めに

PDF を `AWS` で扱う際に、ローカルの環境と `Lambda` や `S3` では少し扱いに注意が必要だったので、忘れないようにまとめておきます。

## 1. S3 から PDF を読み込む

`Python` で PDF を扱う場合は `PyPDF2` を使うことが多いかと思います。

ローカル環境で読み込む場合は

“`.py
# example code
from PyPDF2 import PdfFileReader

PDF_PATH = ‘pdf/xxx.pdf’ # ローカルのディレクトリ
pdf = PdfFileReader(PDF_PATH)
“`

とパスを指定するだけで簡単に読み込むことができます。

`S3` から PDF を読み込む場合は少し工夫が必要です。

“`.py
# example code
import boto3
from PyPDF2 import PdfFileReader
from io import BytesIO

PDF_PATH = ‘data/pdf/xxx.pdf’ # S3バケットの

元記事を表示

if文(条件分岐)

# 今回の授業資料

# 本日の内容
どんなプログラミング言語に限ら

元記事を表示

pytestのparametrizeを使用してテストコードを書いてみる

## 目的
pythonでテストコードの基本を身に着けること。
pytestのモジュールを使用して、大量データのテストコードを想定してテストが実行できるようにしてみること。

#### 注意点
テストコード実務未経験者が書いています。何か不備がありましたら、ご指摘いただけると幸いです。

テスト対象のファイルはこちらです。↓

“` simple_calc.py
def add_func(x,y):
z = x + y
return z

def subtract_func(x,y):
z = x – y
return z

def multiple_func(x,y):
z = x * y
return z

def add_string(x,y):
z = f’苗字は{x}です。名前は{y}です。’
return z
“`

このコードをテストするためのテストファイルはこちらです。
ファイル名には「test_」という接頭辞を付ける必要があります。
まずは一番シンプルな形で、テストコードを書いてみます。↓

“`

元記事を表示

paiza「十億連勝 (paizaランク S 相当) 」をpython3で解いてみた

# 初めに
paizaの「[十億連勝 (paizaランク S 相当)](https://paiza.jp/works/mondai/real_event/continuous_winning)」を、python3で解いてみた。というよりも、解けなかったので、「解説を見てコードを考えた」というのが正しいかも。

# 方針
解説を、自分なりに解釈したものです。

– 帰納的に、i – 1 番目のステージまでの組み合わせの数から、i 番目のステージまでの組み合わせの数を求める。
– 各ステージ終了時に出現する状態を表すために、
– ステージ終了時点での連勝数 w と過去に X 連勝したことがあるかの真偽値 b の組 (w, b) を利用する。
– ステージ終了時点での各状態の組み合わせの数 c を dict で保存する。
– 組は、dict のキーにするために、hashable な tuple で表す。
– 初期状態は、(0, False) で表せて、組み合わせの数は 1 である。
– i – 1 番目のステージ終了時の状態の1つが (w, b) で組み合わせの数が

元記事を表示

Bash シェルスクリプト+ cURL+ Python3 標準モジュールで作る Webex bot 用 Zabbix Alert Script

この記事はシスコの有志による Webex Advent Calendar 2021 の 5 日目として投稿しています。
Webex Advent Calendar 2021: https://qiita.com/advent-calendar/2021/webex

# はじめに
今回は Bash シェルスクリプト、cURL および Python3 の標準モジュールで、Webex bot 用 Zabbix Alert Script を作ってみたので紹介します。Bash シェルスクリプト+cURL または Python3、どちらかだけでも実現できそうですが、下記の理由から組み合わせることにしました。

* Bash スクリプト+cURL だけで作成した場合、Webex bot に投げる body の JSON 作成が大変(Python の方が文字列処理が楽)
* Python だけの場合、Webex bot に POST するために requests モジュールなど非標準モジュールが必要になる(Zabbix サーバに追加のインストールをしたくない)

上記の理由から、おそらく Zabbi

元記事を表示

Python関係のググり方Tips集

# はじめに
2021年現在、**Python**は新たなライブラリや機能が盛んに開発されている言語であり、知識のアップデートや問題解決のために**「ググる」頻度が高い**と想定されます

そこで今回、Python関係でGoogle検索する際に**意識すると検索効率が上がるTips集**を、記事にまとめてみました

# ググるときの流れ

一般的には、以下の流れでググるかと思います。

1. ググるためのワードを考える
2. グーグル検索を実行し、検索結果から適切なサイトを選択する

順を追って、検索効率アップに繋がると感じたテクニックを紹介します。

# 1. ググるためのワードを考える
まず、Python関係で検索が必要となる事態には以下のようなパターンが多いかと思います。
A. あるライブラリの使い方や機能がが分からないので、使い方を調べたい
B. コード実行中にエラーが発生したので、解決策を調べたい

それぞれ、検索ワードを決める際に有効だと感じたTipsを紹介します。

## A. あるライブラリの使い方や機能を調べたい
Pythonは様々なライブラリを組み合わせて使用するこ

元記事を表示

tkinterで表・ボタン・時間表示

#はじめに + tkinterとは
ロボットを操作する際に色んな環境と競合せず,簡単に使用できるpythonのためのGUIライブラリはないかなーとなったときにtkinterを発見しました.ボタンやラベルを使って比較的簡単にUIを作ることができます.

[参考]tkinter
https://docs.python.org/ja/3/library/tkinter.html
[参考]python用のGUIインターフェース一覧
https://www.simugrammer.com/python_gui_matome/

ちなみにpythonにはどうやらたくさんGUIを作れるライブラリがあるっぽいです.
正直,比較していないので特にtkinterが良い理由はないです(笑),,,

その中で今回はロボットのような状態を命令したり表示したりすることが求められる際に利用できる書き方を以下に示したいと思います.
tkinterを使って何か操作したり表示させたい場合はぜひ参考にしてください.
ただ長らくお世話になっている先人たちが丁寧に説明してくださっているので,ここでは割愛してコメントのみ記載して

元記事を表示

pythonでログのファイル出力とコンソール出力を両方できるようにする。

## 目的
– ファイル出力とコンソール出力の両方のログを出力できるようにする。
– ファイル出力については、エラーレベル以上のみ出力されたファイルも作る。

## 注意点
ログについては最近勉強を始めたばかりなので、ここ少しおかしいなとか、もっと効率的に書けるなというところがあれば、コメントいただければ幸いです。

## ライブラリのインポート
“`
from logging import ERROR, Formatter, getLogger, StreamHandler,FileHandler,DEBUG
“`
## ログの出力形式を設定
“`
formatter=Formatter(‘[%(levelname)s] %(asctime)s – %(message)s(%(filename)s)’)
logger = getLogger(__name__)
“`
## コンソール表示用ハンドラーの生成
“`
stream_handler = StreamHandler()
“`
## テキストファイル出力用ハンドラーの生成
デバッグレベルとエラーレベルに分ける。

`

元記事を表示

AOJトライに関する知識知見の記録共有:Volume0-0054

# タスク概要

Sum of Nth decimal places

https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0054

# コード実装例
TIPS

1. 例外処理含む評価パターンを追加
1. 素数5に着目し高速化

“`Python
import pprint, sys, time
import sympy

def core(arg, acc=True):
if acc:
prime_factors = {n: sympy.factorint(n) for n in range(2, arg) if n % 5 == 0}
ret = [sum([prime_factors[v][5] for v in prime_factors if 5 in prime_factors[v]])]
else:
prime_factors = {n: sympy.factorint(n) for n in range(2, arg)}

元記事を表示

[npsocket] 画像のような大規模データを容易にpython通信処理する

#はじめに.socket通信とは?
「TCP/IPのソケット通信」を簡単にする手法を紹介します.
そもそもsocket通信とは,主にプログラム部とTCP/IP部をつなぐ特別な出入り口のことを意味し,TCP/IPのトランスポート層を指す.まあ単純にいうと,同じネットワーク下にある複数のパソコンのデータの共有をする手法です.

ちなみに私は大学院時代にAIロボット系のことをやっていたのですが、その時使用していたロボットのメモリが少なすぎたか私の技量が足りなすぎたか(笑)で,tensorflowの環境をロボット付属のメモリに格納できませんでした.そこでロボットのPCと高性能PCをEthernetハブで通信接続することで,画像とロボット情報の処理を送受信できるようにすることを試みました.その時に使用したのがsocket通信であり,それを**python(numpy)**で容易にしたのが**npsocket**というモジュールです.gitに天才様が作ってくださったこれがなければ私は卒業できませんでした笑

とりあえず
[今回紹介:npsocketのURL]
https://github.com/

元記事を表示

kivyMDチュートリアル其の肆什参 Behaviors – Elevation篇

年もおしせまり、何かと忙しい頃となりました。
>linked by 手紙の書き方 > 手紙の基本 > 時候の挨拶

時候の挨拶 12月(師走:しわす)

さて今年も残り1ヶ月を切りましたが、いかがお過ごしでしょうか。
忙しい時期にはなると思うのですが、小生、残念ながら年末に忙しくなるという
境遇に至ったことがありません。。

なので、この時期がなぜ忙しいのかだとか、どの業界などがどういう風に忙しい
のかなど分からずここまでやってきました。自分の組織ではこういう理由で忙し
いんだよ!というようなコメントを頂けるととても嬉しいです。

前置きを一旦を置いておいて、今週はというとBehaviors章の2回目となります。
今日は今までよく出てきたElevationを取り扱おうと思います。それでは参ります。
※先に言っておくとElevation篇は2週連続としたいと思います

## Elevation

冒頭は丁寧に始めていますが、いつものごとくマテリアルデザインのリンクは
ぶっきらぼうにス

元記事を表示

【Python3】Base64を用いた符号化の復習

Base64によるテキストデータと画像ファイルの符号化の復習です。

#1.基本
最も単純なもの。コード内で定義された文字列の符号化/復号の確認。

“`python:b64_1.py
import base64

plaintext = ‘base64’

b64_text = base64.b64encode(plaintext.encode())
print(b64_text)

plaintext = base64.b64decode(b64_text).decode()
print(plaintext)
“`

  • b64encode()の引数はbytes型であるため、encode()による変換が必要。
  • b64decode()の返り値はbytes型であるため、decode()によってstr型に変換。

b64_1.pyの実行結果は以下の通り。

“`
b’YmFzZTY0′
base64
“`

#2.テキストファイルの読み込み
テキストファイルに書かれた文字列の符号化と、テキストファイルに書かれた符号化文字列の復

元記事を表示

Windows10 で GWSL を利用して Opencv を利用する

## 経緯
– WSL で、Python の画像処理ライブラリ Opencv を利用する際にそのままだと GUI が準備されていない為、画像を表示させらずに処理が止まってしまいました。
– Windows11 から利用できる WSLg に Update すれば問題なさそうのですが、利用している PC でインターネットバンキングなど、まだ動作確認がとれていないものがあり、もし何かあれば仕事に支障をきたす為、Windows11 に未だバージョンアップしたくない、とう状況でした。

上記の理由から、Windows10 の WSL でも GUI を動かして Opencv を利用する必要がでてきました。

## 解決策
Microsoft store にある「GWSL」を利用して解決しました。

## GWSL とは
GWSLは、Microsoft store から Install できる WSL 用の X Window システムです。
Linux のデスクトップアプリが Windows のデスクトップに表示できるようになります。

ターミナル画面では、画像や PDF ファイルの表示ができないの

元記事を表示

Python 辞書

#はじめに
基礎から定着させていこうということで辞書についてまとめました。
Python 3.8.2

#辞書の作成
“`python:dict.py
d = {“x”:1,”y”:2}
print(“d is”,type(d))
print(d)

d2 = dict(x=10,y=20)
print(“d2 is”,type(d2))
print(d2)

d3 = {“x”:”hello”,”y”:”world”}
print(“d3 is”,type(d3))
print(d3)
“`

“`:出力結果
d is
{‘x’: 1, ‘y’: 2}
d2 is
{‘x’: 10, ‘y’: 20}
d3 is
{‘x’: ‘hello’, ‘y’: ‘world’}
“`

#辞書の書き換え、追加
“`python:dict.py
d = {“x”:1,”y”:2}

d[“x”] = 11
print(d)

d[“y”] = “yyy”
print(d)

d[“z”] = 3

元記事を表示

Python タプル

#はじめに
基礎から定着させていこうということでタプルについてまとめました。
Python 3.8.2

#タプルの作成
“`python:tuple.py
t = (1,2,3,4,5)

print(“t is”,type(t))
print(t)
“`

“`:出力結果
t is
(1, 2, 3, 4, 5)
“`

要素が一つでもタプルは作成できるが、「,」を忘れずに

“`python:tuple.py
t1 = (1,)
t2 = 1,

print(“t1 is”,type(t1))
print(t1)
print(“t2 is”,type(t2))
print(t2)
“`

“`:出力結果
t1 is
(1,)
t2 is
(1,)
“`

#タプルの要素の追加
“`python:tuple.py
t = (1,2,3,4,5)
print(t[0])
t[0] = 10
“`

タプルに要素を追加しようとするとエラーが発生する

“`:出力結果
1

元記事を表示

OTHERカテゴリの最新記事