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

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

contextmangerを使った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

元記事を表示

pyhive + jinjasqlで、prestoに対してprepared statementを実行

# はじめに

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

pythonを使って、prestoに対して、変数付きのSQL(prepared statement)を実行する必要があったので、そのときの経験の整理です。

# prepared statementとは

平たくいうと、where句の条件の値のところを変数にしたSQLです。

変数の書き方にはいくつかあり、よくあるものは下記になります。

“`sql:named
select * from user where id = :id
“`

“`sql:qmark
select * from user where id = ?
“`

“`sql:numeric
select * from user where id = :1
“`

python固有のフォーマットだとこちらになります。

“`sql:pyformat
select * from user where id = %(id)s
“`

これらは、PEP

元記事を表示

コマンドを打つとチャンネルを作ってくれる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):

元記事を表示

Ambientに時系列グラフの作成

#環境

Python version:3.7.3
OS: Raspbian GNU/Linux 10

#やりたかったこと
・bme280とラズパイを使用して、温度、湿度、気圧を取得し、タイムリーにグラフ化したい。

#やったこと
bme280とラズパイを使用して、温度、湿度、気圧を取得できる環境は構築済みなので、どうやったらAmbientにデータを上げることができるか、色々試してみた。

温度、湿度、気圧のデータをAmbientにあげるためのコードを記述してみたが、Ambientのデータがあがらなかった。調べてみると、ラズパイのPythonのversionが2.7.16だったため、対応していなかったので、上記versionに変えてみると動作した。

コードは、SWITCHSCIENCEのコードをベースに、作成しました。出力する部分をambientがデータを取得するフォーマットに変換しているだけです。

参考にしたコードは、こちらです。
https://github.com/SWITCHSCIENCE/BME280/tree/master/Python27

#code
“`py

元記事を表示

Scapyでpcapファイルからデータを抽出する

scapyの勉強をしていた時にpcapファイルに含まれるファイルを全て抽出できないかと思い立ち、とりあえず作ってみました。その際の知識もを含めてメモとして残します。

#インストール

pipを使ってインストールが可能です。

“`python:
pip3 install scapy
“`

#基本編

下の構文でライブラリを読み込みます

“`python:
from scapy.all import *
“`

ファイルの読み込みは、rdpcapを使います。

“`python:
p = rdpcap(‘test.pcap’)
“`

pcapデータを全て見る時は、showメソッドを使います。

“`python:
p.show()
“`

“`:出力例
0000 Ether / IP / UDP / DNS Qry “b’www.qiita.com.'”
0001 Ether / IP / UDP / DNS Ans “13.230.63.181”
“`

パケット1個1個の内容を見る時は、パケット番号を指定してshowメソッドを使います。

“`pyt

元記事を表示

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

# タスク概要

Goldbach’s Conjecture

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

# コード実装例
TIPS

1. 例外処理含む評価パターンを追加

“`Python
import pprint, sys, time
import sympy

def core(arg, adv=True, n_eg=3):
n = arg
if adv:
ip = [[i, n – i] for i in sympy.primerange(2, int(n/2) + 1) if sympy.isprime(n – i)]
else:
ip = [[i, n – i] for i in range(n) if sympy.isprime(i) and sympy.isprime(n – i) and i <= n - i] ret = [len(ip), ip[:n_eg]] return ret def ap

元記事を表示

【備忘録】Django Rest Framework のViewについて

DjangoのRest Frameworkについて学んでいます。
学んだことをアウトプットするため、備忘録を書いていきます。
今回はViewに焦点を当てました。
間違った点がありましたら、教えていただけますと幸いです。

# 関数ベースのView(一番簡単)

Responseを返却する関数型のビューです。
第一仮引数に request を受取るように定義するだけです。

“`ruby:
from rest_framework.response import Response
from rest_framework.decorators import api_view # ここにapi_viewというデコレータを記述することにより、DRFの設定が、下記ビューに引き継がれるようになります。

@api_view([‘GET’, ‘POST’]) # 引数としてHTTPメソッドを指定
def hello_world(request):
if request.method == ‘POST’:
return Response({“message”: “Got so

元記事を表示

Don’t Get Fooled by Data

## Introduction

Hi, I’m Kensuke from the Research and Development team in ZEALS. My position in R&D is data analytics, ranging from BI consolidation to hypothesis testing for enhancing the chatbot experience. As a data analyst with three years of experience, I wish to cover the nature of data in this article. “Don’t get fooled by data”.

## Background

ZEALS end-users are users that transitioned from the website to the chatbot that we provide; thus, data mainly consists of users’ actions during

元記事を表示

djangoでsqliteの代わりにMySQLを利用する

# 目的
djangoのチュートリアルなどは基本的に準備の要らないsqliteで行ってきたが、より実務に合わせたものにしたく、使われることの多いMySQLを今回は利用する
# 実施環境
### ハードウェア環境
| 項目 | 情報 |
|:-:|:-:|
| OS |macOS Catalina(10.15.7) |
|ハードウェア | MacBook Air (11-inch, Early 2015) |
|プロセッサ | 1.6 GHz デュアルコアIntel Core i5|
|メモリ | 4 GB 1600 MHz DDR3 |
|グラフィックス | intel HD Graphics 6000 1536 MB |
### ソフトウェア環境
| 項目 | 情報 |
|:-:|:-:|
| homebrew | 3.3.8 |
| mysql | Ver 8.0.27 for macos10.15 on x86_64 |
| python | 3.8.12 |
| django | 3.1.2 |
| anaconda | 4.10.1 |
|

元記事を表示

グラフDBで構成情報を可視化したい:neo4j篇

* 本記事は2021/12/12のアドベントカレンダー原稿を落とした私が後日追加した記事です

以前、仕事の必要に迫られてシステムのNW構成を把握するためにneo4jを使う機会があったため、また使い始めてみようと改めて触りました。
ローカル環境のJupyterLabから同じくローカル起動のneo4j serverにクエリすることで、AWS構成情報のグラフ化を試しました。

## はじめに
冒頭からなんですが、但し書きです。
本記事を作成する中で断念したことは次の通りです。

– [aws/graph-notebook](https://github.com/aws/graph-notebook)のウォークスルーをJupyterLab環境で動かす
– JupyterLabではなくJupyterノートブック前提のnbextensionであり、拡張機能に互換性がなさそうだったため中止しました
– Neo4jのWebコンソール同等の可視化グラフ
– グラフ構造の可視化にあたっては色々と実装上の調整が必要だったため、触りだけ確認しました
– その辺りの操作性だけ先に確認し

元記事を表示

OTHERカテゴリの最新記事