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

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

︎︎

元記事を表示

【令和最新版】Switchのプロコンを連射パッド化してみた【スプラトゥーン2】

#デモ動画
これのやり方を説明していきます。

#用意するもの
– 一般的なスプラトゥーン2をする為の環境
– Switchをドックにセットして、外部ディスプレイを使用、
コントローラーはProコントローラーを使用、ネットはWi-Fiまたは有線LANでスプラトゥーン2をプレイしているものとします。

連射パッドを作成するためにさらに必要なものを書きます。

– パソコン(WindowsかMac)
– MicroSDカードにラズパイ用OSをインストールするのに必要です。
– 僕はWindowsなのでこの記事はWindows用の説明になります。
– (

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#2 HTMLテンプレート表示

第一回目は簡単な文字を表示をしただけでした。
今回はHTMLテンプレートを使って柔軟に規模を大きく綺麗に作っていきましょう。

![flask.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/cc80bb97-0728-0bf0-51f2-540cb0f46641.jpeg)

:::note
Flaskとで使われているテンプレートエンジンはDjangoも同じなので記法も当然同じ。
:::

# :pushpin: Pythonで作るFlaskアプリ記事一覧

| | 内容|
|:—-:|:—-:|
|**part1**|[簡単なページ作成](https://qiita.com/Bashi50/items/30065e8f54f7e8038323)|
|**part2**|**HTMLテンプレート表示 ← ココ**|
|**part3**|”画像” “CSS” “Javascript”実装 予定|
|**part4**|フォーム送信 予定|
|**part5**|データベースの値

元記事を表示

Djangoのon_commitをテストする

overview

Djangoで開発していると、トランザクションを張る部分が出てきます。
そして、「このトランザクションがコミットされたらアクションを起こしたいな…」というニーズもあるはずです。
そんな時役に立つのがtransaction.on_commit。

“`py
from django.db import transaction

def do_something():
pass

transaction.on_commit(do_something)
“`
※ lambdaでラップすれば変数を渡すこともできる。 e.g. `transaction.on_commit(lambda: do_something(arg))`

通常はメール送信やcelery taskなど、投げっぱなしのactionで使用することが多いためテストを実装するというパターンは少ないかもしれない。
しかし、実際にテストするとなると簡単にはいかないのだ…

訪れるAssertionError

(検証用だからゴミコード許して)

“`py:views.py
from dj

元記事を表示

contextmanagerを使ったSFTPのconnection管理 (Paramiko)

# はじめに

[Zenn](https://zenn.dev/nslender/articles/586fc6979cbfdc)とダブルポストです。

[contextmanagerの実践例](https://qiita.com/n_slender/items/c08a0611449cfd4e802c) の続きです。今回はSFTPが題材です。SSH/SFTPのクライアントライブラリとしてよく使われるParamikoを使います。

# Paramikoでの実践例

パスフレーズ付きの秘密鍵を使った、公開鍵認証での例です。

“`python

from paramiko import Transport
from paramiko import RSAKey
from paramiko import SFTPClient

class SFTPService:

def __init__(self, host, port, user, private_key, pass_phrase):
self.host = host
self.port = po

元記事を表示

!cd と %cd の違い

# `!cd` と `%cd` の違いは?

Jupyter Notebookでは`!ls` `!cd`のようなシェルコマンドや,`%time` `%run`などの[マジックコマンド](https://ipython.readthedocs.io/en/stable/interactive/magics.html)が利用できます.

Notebook上でディレクトリを移動する場合,シェルコマンド`!cd`を使いたくなりますが,なぜかマジックコマンドにも`%cd`が存在しています.この違いは何でしょうか?

結論から言うと,

– `%cd`を使うとPythonの作業ディレクトリを変更できる.
– `!cd`を使うと新しいシェル内で`cd`を実行し,そのシェルは終了する.

つまりPythonの作業ディレクトリを変えたいときは`!cd`ではなく`%cd`を使います.

# 実際に試してみる

簡単に動作を確認してみます.個人的に[Google Colab](https://research.google.com/colaboratory/)をよく使うので以下はGoogle Colab上で

元記事を表示

kivyMD開発其の壱 初期公開篇

ハロー、Qiita!いかがお過ごしでしょうか。

すっかり街はというか街でなくてもクリスマスムード。なんだか胸騒ぎしそうでしなくもない
でもなんかソワソワする、そういった時期なのではないかと思ってしまいます(意味不明)。

:::note
先週日曜くらいに投稿しようと思ってたのですが、まんまと忘れていました:sweat_smile:
少し時差がありますがおゆるしのほどを:bow_tone1:
:::

今日はというと、先週お伝えした通りとタイトルの通り(こちらは分かりにくい)ですが、投稿
者自身のサンプルアプリケーションをリリースするということで投稿しています。

先に言っておくと、完成度はそれほどというか全然高くありません:sweat_smile:

ですが、以前から~~口走っていて~~お伝えしていたので、現段階の状態でリリースすること
としました。ではさっそくですが、ここからは本題とします。

## TodoApp

いつかのときに言っていたと思いますが、まずは簡単なものからということで副タイトルの
通りでアプリのことをお伝えしていきます。

どんなものなのかは見てみるに越したこと

元記事を表示

【AtCoder 典型90問】003 – Longest Circular Roadを丁寧に解説【Python3】

## 概要
– 今回取り扱う問題 (AtCoder典型90問より)

https://atcoder.jp/contests/typical90/tasks/typical90_c

問題の解き方に加えて、以下の理解を目的にする。

– AtCoderをはじめとする競プロでよく使われる**深さ優先探索(DFS)**と**幅優先探索(DFS)**を理解する
– **隣接行列**と**隣接リスト**の違い、使い分けについて理解する

## 問題設定

この問題では**DFS**または**BFS**を使って適当な点から最も遠い距離を求める。
さらにその点から最も遠い点を求めることで木の直径を求めるという問題。
愚直にやろうとすると全ての二点の組み合わせの距離が必要なので$O(N^2)$となるが、
この方法だと$O(N)$で求まる。
inputとして以下を考えてみる。

“` Python:入力
5
1 2
1 5
3 5
4 5
“`
コード内では配列の添字を0スタートにしたいので、問題文の数字から1引いて考える。
頂点の数Nに対して辺の数がN-1なので、閉路を持たない木構造であること

元記事を表示

contextmanagerを使ったconnectionの管理 (mysql-connector-python)

# はじめに

[Zenn](https://zenn.dev/nslender/articles/78e6e653053b76)とダブルポストです。

DBアクセスする場合、cursorとDBへのconnectionを、使用が終わったタイミングで、それぞれのclose処理を呼ぶ必要があります。(やらないと、コネクションが残ったままになる可能性があり、同時接続数の上限になったタイミングで、正しい動作をしなくなるなど、なんらかのバグの要因になるためです)

Pythonでは、with構文を使うことで、自動でclose処理が呼ばれます。いわゆる、リソース管理のための機能を、言語の標準機能として提供しているということです。Javaでいうところの、try-with-resources構文と同じ役割です。

https://docs.python.org/3.9/reference/compound_stmts.html#the-with-statement

ただ、ライブラリによっては、cursorやconnectionなどのオブジェクトが、with構文に対応していないこともあります。
この場

元記事を表示

コマンドを打つとチャンネルを作ってくれるdiscordbotをPythonで作ろう #4 ~おまけ~

[前回](https://qiita.com/peco_2282/items/56ec9a81a5e99c7a8959)までは
テキストチャンネル作成: `guild.create_text_channel()`

ボイスチャンネル作成 : `guild.create_voice_channel()`

カテゴリ作成     : `guild.create_category()`

の3つに触れました。

ついでなのでチャンネル削除についても作ってみたいと思います。

# チャンネルを削除する

`.chdel` の後に

– チャンネルidを入力しない場合: そのチャンネルを削除

– チャンネルidを入力した場合 :id指定されたチャンネルを削除
– idを入力したが存在しない場合:削除しない

このパターンで行きます。

コードです。

“`python
# 新しくモジュールをインポートします
from asyncio import sleep

if message.content.startswith(‘.chdel’):
try:
msg =

元記事を表示

CentOS7にPython3仮想環境(venv)をセットアップする

# ポイント

CentOS 7のPython 3.6において、ensurepipの問題で仮想環境(venv)がうまく入りませんでした。
仮想環境作成時に `–without-pip` オプションを付けてまず仮想環境を作成し、続いてpipをインストールすることで無事に作成できました。

## 通常の手順でやってみる(失敗する)

“`bash
$ mkdir virtual
$ python3 -mvenv virtual
Error: Command ‘[‘/home/user/virtual/bin/python3’, ‘-Im’, ‘ensurepip’, ‘–upgrade’, ‘–default-pip’]’ returned non-zero exit status 1.
“`

私の環境が悪いのか、ensurepip周りでエラーが発生して仮想環境が構築されません。
ensurepipだけを読み込んでみるとsetuptoolsがないぞと言われます。

“`bash
$ /home/user/virtual/bin/python3 -Im ensurepip
Tr

元記事を表示

Raspberry PiでRM mini (黒豆) を使う

# ライブラリのインストール

“`shell:console
$ sudo apt install libffi-dev libssl-dev openssl
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
状態情報を読み取っています… 完了
openssl はすでに最新バージョン (1.1.1k-1+deb11u1) です。
openssl は手動でインストールしたと設定されました。
提案パッケージ:
libssl-doc
以下のパッケージが新たにインストールされます:
libffi-dev libssl-dev
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
1,637 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,203 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian bullseye/main armhf l

元記事を表示

コマンドを打つとチャンネルを作ってくれるdiscordbotをPythonで作ろう #3

[前回](https://qiita.com/peco_2282/items/da91c07405534447c925)の続きです。
しばらく更新していませんでした。すみません。

# ボイスチャンネルを作成する
全体のコードです。

“`python
if message.content.startswith(‘.vc’):
msg=message.content.split()
try:
if len(msg[1]) > 0:
await message.channel.send(f'{message.author.mention}がボイスチャンネルを作成しました。’
f’\nチャンネル名は、{msg[1]} です。’)
await message.guild.create_voice_channel(name=msg[1])
# 2021/12/27追記
# 同じカテゴリに作りたい場合、(n

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#1 簡単なページ作成

PythonのWebアプリケーションフレームワーク「Flask」の初心者プログラマー用のwebアプリ作成チュートリアルです。

機械学習やAI、スクレイピング、RTA、IoTたくさんのところで使われていて、習得もしやすく言語の教材はたくさんあるのにWEBアプリの教材ってそんなに多くない:innocent:

せっかく便利な機能や分析できるようにしたならブラウザで見れたり、操作、データを入力したいですよね。
と言うことで、Flaskでアプリ作ってより役に立つものを世の中に出していきましょう!
![flask.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/36e12d0f-80f7-dfc0-0129-06f23fb49072.jpeg)

内容ですが、以前Djangoで簡単なアプリ作りました。同じようなアプリをFlaskで作ろうと思います。

https://qiita.com/Bashi50/items/c686d30fa4fdba4582ad

この記事と同じく全5回くらいで作成し

元記事を表示

Pythonでの Lambda関数共通ユーザ(cognito)操作Util

#実装
“`user_utils.py
# -*- coding: utf-8 -*-
import secrets
import string
import boto3

USERPOOL_ID = ‘USERPOOL_ID’
client = boto3.client(‘cognito-idp’)

def show_user_list():
“””Cognitoおよびエンティティからユーザリストを取得する(最大60名)
Returns:
ユーザ情報(ユーザーID、ユーザー名、状態、グループ権限)
“””
def _user_list(pagination_token=None):
“”” Cognitoユーザーリストの再帰取得
Args:
pagination_token: 前回呼び出しトークン

Returns:
ユーザ情報(ユーザーID、ユーザー名、状態、グループ権限)
“””
if paginati

元記事を表示

Pythonでの Lambda関数共通StepFunctionUtil

#実装
“`step_functions_utils.py
# -*- coding: utf-8 -*-
import boto3

stepfunctions_client = boto3.client(‘stepfunctions’)

def execute(state_machine_arn, input_message_body):
“””StepFunctionsを呼び出す関数
Args:
state_machine_arn: 呼び出したいStepFunctionsの名前
input_message_body: StepFunctionsを呼び出す際のメッセージ
Returns:
start_execution実行結果(dict)
“””
try:
return stepfunctions_client.start_execution(
stateMachineArn=state_machine_arn,
input=

元記事を表示

pythonでの Lambda関数 キュー送信

#実装
“`sqs_utils.py
# -*- coding: utf-8 -*-
import boto3

sqs_client = boto3.client(‘sqs’)

def push_message(message_body):
“””SQSの特定キューにメッセージをPUSHする
Args:
message_body: PUSHするメッセージ
Returns:
sqsメッセージ送信時のレスポンス
“””
try:
response = sqs_client.send_message(
QueueUrl=”https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXXXXX/my-sqs”,
MessageBody=message_body
)
except Exception:
raise
return response

“`

#参考
htt

元記事を表示

Pythonでの Lambda関数共通ログ出力Util

#実装

“`log_utils.py
# -*- coding: utf-8 -*-
import logging
import sys
from datetime import datetime
from pytz import timezone

def _customTime(*args):
“””ログ用の時間出力
Returns:
現在時間(Asia/Tokyo)
“””
return datetime.now(timezone(‘Asia/Tokyo’)).timetuple()

LOG_LEVEL = ‘INFO’
_logger = logging.getLogger(__name__)
_logger.setLevel(LOG_LEVEL)
_logger.propagate = False
for h in _logger.handlers:
_logger.removeHandler(h)

h = logging.StreamHandler(sys.stdout)
# ロガーのフォーマット指定
FO

元記事を表示

Pythonでの Lambda関数共通認証Util

#実装

“`auth_utils.py
# -*- coding: utf-8 -*-
import base64
import boto3
import json

cognito_client = boto3.client(‘cognito-idp’)
cognito_identity_client = boto3.client(‘cognito-identity’)
USERPOOL_ID = ‘USERPOOL_ID’
CLIENT_ID = ‘CLIENT_ID’
IDENTITYPOOL_ID = ‘IDENTITYPOOL_ID’

def authenticate(user_id, password):
“””指定されたユーザIDとパスワードで認証を実施する
Args:
user_id: ユーザID
password: パスワード
Returns:
認証結果(AccessToken,RefreshToken,IdToken,ExpiresIn,TokenType)
“””
tr

元記事を表示

Pythonでの Lambda関数共通レスポンスUtil

#目的
PythonでのLambda関数共通レスポンスUtilを作成方法を共有します。

#実装
“`response.py
import decimal
import json

class DecimalEncoder(json.JSONEncoder):
“””DecimalEncoder クラス
Decimal クラスを使用して保存された数値を出力するために使用されます(Amazon DynamoDBの数値を保持します)
“””
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)

def response_200(body, **kargs):

元記事を表示

OTHERカテゴリの最新記事