Python3関連のことを調べてみた2022年01月02日

Python3関連のことを調べてみた2022年01月02日
目次

【Python Flask & SQLAlchemy】初心者プログラマーのWebアプリ#5 DB登録/編集/削除

前回Flaskのフォームからデータを送信する方法を扱いました。ただ、WEBアプリを作るならデータベース(以後DB)を使わないと便利なアプリ、サービスを作ることができません。

Python(Flask)ではSQLを書いて実行することもできなくはないですが、`SQLAlchemy`と言うORマッパーを使うのが一般的かと思います。

![リレーション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/5a15ca72-67c9-8518-bf1f-4475f0147060.png)

同じPythonのフレームワークDjnagoには独自のORマッパーが標準でついているのでそれを使えばいいですが、Flaskなどの軽量フレームワークにはORマッパーがついていないので`SQLAlchemy`を導入するところから始めます。

:::note
ORマッパーはSQLを書かずにPythonなどの言語を書くだけでSQLを作成してDBのデータを取り扱えるものです。
最近のWEBアプリ開発ではORマッパーを使った

元記事を表示

investypyで日ごとの株価をグラフ化する。

#環境
Python version:3.9.7
OS: windows 10.0
Anaconda:conda 4.11.0

#実装したかったこと
・日ごとのデータをグラフ化したかった。

#code
investpyについての説明は、一番下のリンクを参照してください。
data_get.pyでは、form date,to date までの日ごとの株価変動を取得しています。codeについては、上場している会社のコードを入力します。
結果をcsvファイルとして出力します。実際使ってみて改良していきます。

“`python:data_get.py
import pandas as pd
import investpy
import datetime
import os

now = datetime.datetime.now()
today = now.strftime(“%d/%m/%Y”)

#変数定義
code = ‘6724’
company = ‘seiko_epson’
performance = ‘term_price’

#フォルダ作成
os

元記事を表示

[Python]テンプレフォルダ構成について考えてみる(フォルダ構成編)

# 目的
他人から「ソースコード読むの大変」という ~~~職務放棄~~~ お困りごと相談をされることが増えた。
一因として、私のCommitしているコードが我流であることもある気がしているので、業界標準というやつを調べ・考えてみようという記事です。
(意訳:「テメエの努力不足だボケェ」と胸張って言い返すための記事)
(なお、「お前も勉強不足だ」というコメントは大歓迎です)

# ディレクトリ構成(2021/12)
Readmeとかは割愛するが、以下のような形。
結論としては、ほぼPytestのベストプラクティス通りとなった。

“`
.
├──
├── pyproject.toml
├── setup.cfg
├── setup.py
├── src
│   └─ │      ├── __init__.py
│      └── *.py
└── tests
   └─
   ├── __init__.py
   └── test_*.py
“`

# CI/CD
説明

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#4 フォーム POST/GET送信・受け取り

第4回目はform入力ページから情報を入力してもらい、Flask(サーバー)に送ってデータ処理を行う方法を扱います。

![form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/9562ac96-6f89-46e8-da18-0fd2594af105.png)

フォームを使って情報を柔軟に受け取れるようになると、一般的なWEBアプリはもちろん、AI、画像認識機械学習、自然言語系の機械学習などなど、入力されたフォームの情報を使って役に立つWebアプリで使えるようになると思います。

Pythonを使っているならぜひ身につけておきたいところですね。

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

| | 内容|
|:—-:|:—-:|
|**part1**|[簡単なページ作成](https://qiita.com/Bashi50/items/30065e8f54f7e8038323)|
|**part2**|[HTMLテンプレート表示](https://q

元記事を表示

Python3.11の新機能 (まとめ)

## はじめに

Python 3.5から What’s Newの内容をまとめる記事を投稿してきました。

* [Python3.5の新機能](http://qiita.com/ksato9700/items/9a0aef07d90d00e67525)
* [Python3.6の新機能](https://qiita.com/ksato9700/items/ed839a6db6a671fd31e6)
* [Python3.7の新機能](https://qiita.com/ksato9700/items/35a0bdc04693b3b09757)
* [Python3.8の新機能(まとめ)](https://qiita.com/ksato9700/items/3846e8db573a07c71c33)
* [Python3.9の新機能(まとめ)](https://qiita.com/ksato9700/items/d5df9d36147796c86c77)
* [Python3.10の新機能(まとめ)](https://qiita.com/ksato9700/items/2cd85bec2

元記事を表示

【Python】itertools.groupbyで作ったオブジェクトを後で使おうとすると中身がない

PythonでJoblibというライブラリを使って**itertools.groupby**(以下**groupby**)でグループ化したデータを並列実行処理したときに、なぜか上手く動かないことがありました。
解決後に判ったことをふまえて、原因を説明したいと思います。

# 起きたこと(再現)

JoblibというライブラリのParallelに**groupby**を使ったジェネレータを渡して、並列処理を実装しました。

“`python:
from joblib import Parallel, delayed
from itertools import groupby

# タグごとのメンバーを表示する
def view_members(tag, members):
print(f”Tag:{tag}”)
for member in members:
print(f”Name:{member[‘name’]} Birthday:{member[‘birthday’]}”)

# メンバーのデータ
props = [
{“name”: “Al

元記事を表示

FastAPIでBearerトークンを抽出する

小ネタ。

FastAPIで`Authorization: Bearer {token}`のようにヘッダで送られてくるトークンを使って認証したい場合に、トークン取得処理の自前実装が不要になる。

# コード

`Depends`を使ってDIチックに処理できるので嬉しい

“`python:dependencies.py
from fastapi import Request, Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials

async def get_bearer_token(
request: Request,
bearer: HTTPAuthorizationCredentials = Depends(HTTPBearer)
) -> str:
credentials = await bearer(request)
token = credentials.credentials
return token
“`

`await b

元記事を表示

【Python3】@propertyで変数を疑似的にプライベート変数化して隠ぺいする

Pythonには変数をプライベート化(外部から参照・代入できなくする)する機能がありません。
ただしpropertyデコレータを利用するとそれっぽいものを実装することはできます。

## 環境
Ubuntu20.04
Python3.8.10

## propertyとは

Pythonの組み込みクラスで、オブジェクトの属性を操作する関数を実装しています。

#### 定義
“` property(fget=None, fset=None, fdel=None, doc=None) “`

– fget: 属性の値を取得する関数
– fset: 属性の値を設定する関数
– fdel: 属性の値を削除する関数
– doc : 属性のdocstringを作成する

基本的な使用方法は下記の通りです。(Pythonの公式ドキュメントから丸写し)

“`python
class C:
def __init__(self):
self._x = None

def getx(self):
return self._x

def s

元記事を表示

[Python]循環importになるケースでも型アノテーションができるケースがある、という話

# TL;DR

Pythonで2つのモジュール間でお互いにimportしており、且つその中でのクラスなどの型アノテーションをエラーにならずに対応できるケースがあるよ、という話です。

# 使う環境

– OS: Debian GNU/Linux 10
– Python 3.6

※個人で趣味で作っているPythonライブラリの最低バージョンの3.6に合わせているので新しいPythonバージョンではもしかしたら話が変わってくるかもしれません(そろそろPython 3.6のサポートを切っても良いかもですしね・・・)。

# 悩ましいPythonの循環importのエラーの話

他の静的型付け言語だと特に気になったりしないのですが、Pythonだと2つのモジュールでお互いにimportしあう形になっているとImportErrorになったりすることがあります。例えば以下のように`sample_A.py`というモジュールと`sample_B.py`というモジュールがあるとして、お互いに各モジュール内のクラスを型アノテーションなどでimportしている・・・といったケースです。

“`py:s

元記事を表示

pythonでクロージャを書いてみた

## 概要

決まりきった正規表現は何回もコンパイルする必要がないので、メモ化したいが、グローバル変数は使いたくないので、初めてクロージャを使って実装してみた
まだまだpython初心者なので、あんまりpythonらしいコードが書けてるかは自信がない

## 実装

“`python
import re
from typing import Callable, Pattern

def create_email_regexp_generate_func() -> Callable[[], Pattern]:
reg = None

def _email_regexp() -> Pattern:
# regへの参照を可能にする
nonlocal reg
if reg is None:
reg = re.compile(r”(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)”)
return reg

return _emai

元記事を表示

【Python Flask】初心者プログラマーのWebアプリ#3 【Javascript導入】【画像表示】【CSS適用】

# 今回のPython Flaskフレームワークで作るもの
今回はFlaskで静的ファイルを使用する方法について書きます。
前回はHTMLテンプレートを使って表示を作りました。簡単なデータ埋め込みです、表示を動的に作成していました。
今日扱うのは、「静的ファイル」を使ってページ作成です。静的ファイルは

– 画像ファイル
– CSS
– JavaScript

こんなものがあります。WEBページを作るときには必須の要素ですがファイルそのものを配置して、Flaskではとくに処理しないで表示するだけという、中身のデータが変化しないでそのまま使うようなものを静的ファイルって言います。

![html,js,css.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/4890a8f2-c20c-f9db-49e1-7ee6a89a84f7.png)

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

| | 内容|
|:—-:|:—-:|
|**part1**|[簡単なペー

元記事を表示

Python3エンジニア認定基礎試験

#意図
受験して合格できましたので、これから受験される方への一助になればと思い雑記を残します。
###私のバックグラウンド
・受験前からPythonの経験は多少あり
・ただ使う場面が偏っていたので、一度体系的に勉強してみたかったので受験を決意
・他言語の経験も多少あり
・職業プログラマではない
・飯を食っているのはインフラエンジニアとして
・仕事があるので、勉強に避けるのは土日メイン
#受験当日:メモ用紙等は配布されません
コードを追ったり、リストや文字列を数えたりするのにメモ用紙等があれば便利ですが、試験時にはそのようなものは配布されませんでしたし、持ち込みも不可でした。よって、問題はすべて目で追い、脳内ワーキングメモリで処理せねばなりません。勉強時に問題を解くときもメモ用紙等を使わずに回答できるようにしておきましょう。
#模擬テストと本番の違い
おそらく多くの方は、[DIVE INTO CODE](https://diver.diveintocode.jp/dive_into_exam/lp)様と、[PRIME STUDY](https://study.prime-strategy

元記事を表示

Pythonのsubprocessでkillが効かないときの対処法

# はじめに
Pythonの`subprocess.Popen`を使って,サブプロセスを起動・終了させようとしたが終了だけうまくいかなかった.
原因と対処法をメモしておく.

# 結論
この現象は,`subprocess.Popen`で`shell=True`を指定していた場合に発生する.

対処法は,`exec`コマンドを先頭にくっつけること.

“`python
subprocess.Popen(‘exec 実行するコマンド’, shell=True)
“`

# 再現手順
以下のように,`起動する側(run.py)`と`起動される側(wait.py)`の2つのスクリプトを書くと簡単に再現できた.

“`python:run.py
from subprocess import Popen
import time

p = Popen(‘python3 wait.py’, shell=True)
time.sleep(5)
p.kill()
“`

“`python:wait.py
import time

for i in range(1000):
print(i

元記事を表示

【Python3】プライベートなインスタンス変数にクラス外からアクセスできてしまう

Pythonのカプセル化について備忘録としてまとめます。

## 環境
* Ubuntu20.04
* Python 3.8.10

## 筆者の認識

– インスタンス変数の頭にアンダーバーを2つ着けるとプライベート変数として扱われ、クラスの外部から参照・再代入できなくなる。

“`python:Hoge.py

Class Hoge(object):
def __init__(self, hoge: str):
# 外部からアクセスできなくする
self__hoge = hoge

hoge = Hoge(“fuga”)
# エラーになるはず
hoge.__hoge = “foo”
# エラーになるはず
print(hoge.__hoge)
“`

## 実際の挙動

“`python:Hoge.py

class Hoge(object):
def __init__(self, hoge: str):
self__hoge = hoge

hoge = Hoge(“fuga”)

hoge.__hoge = “foo”

print(ho

元記事を表示

Python + TypeScriptのmonorepoでpre-commitの設定

## はじめに

やろうとした時に他にやっている人がいないくて、
色々調べてもなかったので備忘録として。

## よくあるやつ
* `TypeScript`

[Run a TypeScript type check in your pre-commit hook using lint-staged + husky](https://dev.to/samueldjones/run-a-typescript-type-check-in-your-pre-commit-hook-using-lint-staged-husky-30id) にあるように `husky` と `lint-staged` の組み合わせを使う

“`json
{
“scripts”: {
“prepare”: “husky install”
},
“lint-staged”: {
“**/*.{ts,tsx}”: [
“prettier –config .prettierrc –parser typescript –write”,
“git add”

元記事を表示

秋月のI2C接続有機ELディスプレイをラズパイ4に接続する

秋月で売ってる[有機ELキャラクタディスプレイモジュール 20字x2行](https://akizukidenshi.com/catalog/g/gP-08279/)をRaspberry Pi4に取り付けて制御したメモ。

先人の記事のプログラム(参考文献)をもとに色々改良してみる。

# 組み立て
16文字版も20文字版もピンの形は違う(16文字は1列、20文字は2列)
が機能は一緒。接続は次のとおりとした。

|I2C側|ラズパイ側|備考|
|:–|:–|:–|
|1 VSS|7 GND|1−3で短絡|
|2 VDD|1 3.3V|2−4で短絡|
|3 /CS|7 GND|1−3で短絡|
|4 SA0|1 3.3V|今回はSアドレスは1に設定。|
|7 SCL|5 SCL| |
|8 SDAin|3 SDA|8−9で短絡|
|9 SDAout|3 SDA|8−9で短絡|

将来的な拡張(ディスプレイ2枚差し)と短絡(分岐)のやりやすさを考え、ラズパイからユニバーサル基板を経由してI2Cのディスプレイに接続するようにした。

![イメージ図](https://qiita-ima

元記事を表示

【必見】django_restframworkでリレーションモデルをJSON形式で展開する方法

# 目的
DjangoRestframeworkでAPIを作成していて、

“`
{
“id”: “9510f7c1-a364-4e44-96ae-2fdd7fbc957d”,
“gender”: “M”,
“username”: “Shun”,
“age”: 25,
“introduction”: “よろしく”,
“job”:1
}
“`
このようなJSONをResponseとして返していたが、
このコードでは“`job: 1“`となっていてかなり扱いづらいJSONとなっているためなんとかしなければならないと思った。

# 解決方法
親モデルの利用するシリアライザの中に

“`
外部キー名 = 外部キーのテーブルのシリアライザ名()
“`
と記述するだけで外部キーのテーブルを展開できた。

# 具体例
django_restframeworkでModelViewSetを利用している。
Membersモデルの中にjobの外部キーがあり、Jobsモデルを参照している状態だ。
これに

元記事を表示

Using Docker-outside-of-Docker and Flask to use easily Docker inside the containers

## Disclaimer

Note that the approach presented in this article is **only meant to be used within a trusted network!**:

1. [Command injection](https://owasp.org/www-community/attacks/Command_Injection) codes are contained (as pointed out by my colleague and supervisor [E. Torii](https://qiita.com/eitaro-torii-dtws)).
1. Exposing `/var/run/docker.sock` gives the container root privileges of host (as pointed out by my colleague and supervisor [E. Torii](https://qiita.com/eitaro-torii-dtws)).

Aga

元記事を表示

︎︎

元記事を表示

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

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

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

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

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

元記事を表示

OTHERカテゴリの最新記事