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

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

FastAPI × Stripe サブスクリプション登録を試す

## はじめに
サブスクリプション課金を行う際、Stripeを利用すると比較的簡単に課金が行えますが、DB上にある顧客の情報を使いたかったり、すでにサブスクリプション課金が行われている顧客に再度登録が走らないようにしたいなどの理由で、バックエンド側のAPIサーバーを絡めるケースはあるかと思います。

Stripeでサブスクリプション登録をするためには、以下3つの作業が必要になります。
1. Planを登録する
2. Customerを登録する
3. Subscriptionを登録する

これら3つについて、FastAPI経由での実装を試してみました。

## 事前準備
### FastAPI
[FastAPI公式](https://fastapi.tiangolo.com/ja/#_3)に従いアプリケーションの準備を行います。

### Stripe
[Stripe公式](https://stripe.com/jp)にてアカウント登録を行います。

登録を行うと、テスト環境が利用可能となります。
また、ダッシュボードの「商品」タブから商品登録を行います。この際料金情報の登録は不要です

元記事を表示

挿入順を覚えている連想配列

# これは何?

Ruby の Hash には shift があることの紹介。
と思って調べたら、 Python3 の `dict` にも順序があるのがあったので、それも紹介。

# Ruby の Hash

Ruby の Hash は挿入順を覚えている。
挿入順を利用して古いものから順に取り出せる。
以下のような感じ。

“`ruby:ruby
h={foo:111,bar:22,hoge:3}
h[:bar]=44
h[:baz]=55
s=””
while ! h.empty? do
s += h.shift.inspect
end
p s #=> “[:foo, 111][:bar, 44][:hoge, 3][:baz, 55]”
“`

先頭の値を見る `first` と、先頭の値を撤去する `shift` はあるけど、末尾を扱う `last` と `pop` は無い。

“`ruby:ruby
{a:1}.first #=> [:a, 1]
{a:1}.last #=> NoMethodError: undefined method `last’
{a:1}.

元記事を表示

[Python]等差数列×等比数列の解を求めてみた[備忘録]

# はじめに
Pythonでコーディングを行ったので、備忘録として残します。
Python環境下にて、是非お使いください。

# コーディング
“`py
#sympy内の関数を使用
from sympy import *
n=Symbol(“n”)
a,b,c = map(int,input(“a,b,c=? ? ?”).split())
while c==0:
print(“Input a,b,c except c==0”)
a,b,c = map(int,input(“a,b,c=? ? ?”).split())
Prog = sequence((a*n+b)*c**n, (n, 0, 20))

#以下、出力(例:a,b,c=1 1 2)
print([int(N) for N in Prog])
print(Prog[3])
“`
>出力結果
[1, 4, 12, 32, 80, 192, 448, 1024, 2304, 5120, 11264, 24576, 53248, 114688, 245760, 524288, 1114112, 2359296,

元記事を表示

Pythonにおける.gitignoreに追加するべきファイル

# .gitignoreファイルとは
Gitの管理下から除外するファイル・フォルダを指定するファイルのこと。
commit内容をできるだけ汚さない為に、ローカル環境(自分のPC)だけに
必要なファイルを追加する。

## Gitの管理下から除外推奨のファイル・フォルダ例
各言語における除外すべきファイル・フォルダは公式サイトを参照。

https://github.com/github/gitignore

### Python
https://github.com/github/gitignore/blob/master/Python.gitignore

+ PyCharmのキャッシュファイル
+ venvの仮想環境フォルダ
+ jupyter notebookのチェックポイントフォルダ

など、うっかりcommitすると怒られるので要注意

元記事を表示

mac pyenv 環境でtkinterがnomodulenamedになる時の対処法

macでtkinterをinstallしても起動せず、いろいろ格闘した末に起動できたので、どうやって解決したかをまとめてみた。

#使用していた環境・バージョン
・macos mojave (10.14.6)
・pyenv 2.0.4
・tcl-tk 8.6.11 (bottled)[keg-only]
・python3.9.6

#結論
`$ brew install tcl-tk`,
`$ brew install python`した後に
`$ brew install python-tk`を入力

#症状
python3.9.6を使用。tkinteを使うために以下のようなコマンドを打つとエラーが発生。tkinterはpythonの標準ライブラリのはずなのになぜか起動しない。原因はtcl-tkがパソコンに入っていないことらしいが、最後までイマイチよくわからなかった。

“`
$ python3 main.py
(中略)
Traceback (most recent call last):
(中略)
import _tkinter # If this fails your

元記事を表示

大谷選手がホームランを打ったことをLINE通知してみた。

##はじめに

大谷選手の活躍が目覚ましいですね!!
普段野球はほとんど観ない私ですら、ついついホームランを打ったかどうか、結果が気になってしまいます。

しかし、結果は気になるものの、
・試合日程は把握していない
・そのため、適宜Yahoo!ニュースをチェックして大谷選手がホームランを打っていないかチェックする
という状態であり、段々とチェックするのが面倒になってきてしまいました。
(試合日程を確認すればいいだけなのですが・・・)

そこで、大谷選手がHRを打ったことをLINE通知する仕組みを作ってみました。

↓マーベラス、オオタニサン!!

## 通知内容

通知内容は
・大谷選手がHRを打った旨のメッセージ(1パターンのみ)
・画像
・Yahooの記事
の3点です。

【Python】よく使いそうな書き方まとめ

## はじめに

Python勉強中です。
よく使うであろう、もしくは使いそうな書き方を備忘録としてまとめます。

## 文字列関連

### 文字列の演算
“`python
book = ‘book’
print(book * 4)
“`

bookbookbookbook

### bool型への変換

“`python
print(bool(”))
print(bool(‘bool’))
print(‘oo’ in ‘bool’) # ‘oo’が含まれている事を確認
print(‘x’ not in ‘book’) # ‘x’が含まれていない事を確認
“`

False
True
True
True

### format

“`python
a = ‘Python’
b = ‘YEAR!!’
print(f'{a}, {b}’)
print(‘{}, {}’.format(a, b))
“`

Python, YEAR!!
Python, YEAR!!

### パディング

元記事を表示

Pandas DataFrameをリストに入れて都合よく使っちゃおう

本日、私的には大変ありがたい学びがあったのでここに記すことにしました。

タイトルに示した通り、リストの中にPandas DataFrameを格納して必要に応じて呼び出して使うことができました。
また、リストに入れたDataFrameの名前は同一のもので良いことが大変ありがたいと感じました。

素人の私はpandasでDataFrameを作るたびになんだかよくわからないDataFrameの名前を用意してdf1,df2・・・などと名前を変えて作成しておりました。それが、listに格納する順番が決まっている場合はわざわざdfにまどろっこしい名前をつけることなく、リストから呼び出すことが可能です。
文で説明するのも大変なのでコードを示します。

例えば以下のように変数名が一緒で中身のみ違うdfを用意して、
リストにappendを繰り返すとlistにデータフレームを格納することができています。

“`py
dflist = []
df = pd.DataFrame([1,2],[3,4])
dflist.append(df)
df = pd.DataFrame([5,6],[7,8])
df

元記事を表示

pythonでsqliteを利用しようとしたら、AttributeError: ‘builtin_function_or_method’ object has no attribute ‘execute’とエラーが出た。

# エラー発生時の状況
sqliteを利用して、入力した文字を検索する辞書アプリを作成していたところ、下記のエラーが発生した。

# エラー文
“`
DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don’t rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.
Exception in Tkinter callback
Traceback (most recent call last):
File “/Users/{user名}/.anyenv/envs/pyenv/versions/3.9.1/lib/python3.9/tkinter/__init__.py”, line 1884, in __call__
return self.func(*args)
File “/Users/{user名}/Desktop/ejdi

元記事を表示

Pythonのwindllでメッセージボックスを使いこなす

今回はPythonのwindllを使ってメッセージボックスを表示させます。
tkinterやwxPythonを使わない方法です。
まぁtkinterやwxPythonを使った方が簡単なので、今回の記事はあんまり需要はないと思いますが…

tkinterやwx向け↓
wxPythonでメッセージボックスを表示させる
Tkinterでメッセージボックスを表示させる -メッセージボックスをフルに使う-

っで、windllなのでWindowsじゃないと実行できません!

Macとかではエラーになると思うので。

#サンプルコード

“`Python
import sys
from ctypes import *

user3

元記事を表示

Garmin fit形式ファイルの解析手順

## はじめに
Garminなどで計測したデータをフルに活用するには、fitファイルとして出力されたデータを解析する必要があります。hiking時のデータを事例にfit形式ファイルを解析する方法をまとめました。

## 1. fitparseライブラリをインストールする

“`python
!pip install fitparse
“`

https://github.com/dtcooper/python-fitparse

“`python
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import os
import fitparse
“`

# 2. fit形式ファイルを読み込む

“`python
fitfile = fitparse.FitFile(“./xxxxxx/xxxxxx_ACTIVITY.fit”)
fitdata

元記事を表示

Pythonで始めるwebスクレイピング_[1]導入編

## Pythonを導入から
過去に業務でPythonを使用したことはあったのですが、しばらくの間離れていたところ、ほとんど最初から学び直す羽目になりました。
会社の都合で使用する機会がありそうなので、触ってみることにしました。
ただ言語を学ぶのだと面白く無さそうなので、ついでにwebスクレイピングやクロールをしながら学んでいこうと思います。

### 実行環境
pythonは2系がサポート終了するので、3系でやることにします。
2系の経験がある方は2系と3系の違いは以下のようなまとめてくれている記事を参照するといいと思います。

* https://www.python-izm.com/tips/difference_in_version/
* https://qiita.com/cstoku/items/353fd4b0fd9ed17dc152

## スクレイピングのための道具を準備する
まず手始めに[こちら](https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406)を参考にスクレイピングをやってみます。
pythonと

元記事を表示

Scrapy – Spiderに渡す引数のうち__init__関数内で利用するものでも初期化宣言が必須ではなかった

#結論
ScrapyのSpiderに渡す引数(Argument)は「\_\_init\_\_」関数内で利用するものは初期化宣言が引数の渡し忘れに備えて推奨されています。
以下のサンプルプログラムでいう、feedは`def __init__(self, feed=None, *args, **kwargs):`にてfeed=Noneが初期化宣言です。検証した結果、これがなくても動作でき必須ではありませんでした。ただし**self.feed**としてクラス変数を参照する必要があります。
(Scrapy 2.5.0で検証)

##経緯
Spiderに渡す引数の取り扱いにわかりにくいところがあったので残します。
公式のチュートリアルでも「\_\_init\_\_」関数内で受け取る引数には初期化宣言がついているのですが、
これが他のインスタンス関数では不要で場合分けが必要だと思ったので調べました。

##検証
qiita.comのfeed部分と任意messageがSpiderの引数になっているサンプルプログラムを例にします。
レスポンスのparse部分やmiddleware, pipeline処

元記事を表示

Telloプログラミング:data, server = sock.recvfrom(1518)のdataの中身を覗いてみた

Telloプログラミングの中で、TelloとMacbookとの通信経路を確立する部分の定番コードは、次のようなものです。

“`python3:
data, server = sock.recvfrom(1518)
“`

ここで、返り値を受け止める__*data*__変数に、どのような値が入るのか、興味を持ちました。
この変数の中身を、Terminalに出力して確認してみました。

__[前回の記事](https://qiita.com/electronics_diy721/items/df5235c692a84867cd60)__を改良してみました。ソースコードの全体は、この記事の最後に掲載してあります。

###コード改編部分

>以下を追加(2021/7/28)
>dataはバイト列(例:b’\x 16指数表記データ’)だから、str型に変換するにはdecodeが必要
>received_data = data.decode(‘utf-8’)
>print(“Telloからの返り値: ” + received_data)

“`python3:コード該当箇所1
def

元記事を表示

Telloから送られてくるデータをMacbook側で受信して、Terminal表示してみた

__過去に作成した次の記事__では、TelloにWifi接続したMacbookのTerminalに、Telloの操縦コマンドを打ち込み、Telloを遠隔操作しました。

– __[MacBookのTerminalに、Telloの操縦コマンドを手入力して遠隔操作してみた](https://qiita.com/electronics_diy721/items/f9f4b1f87e83801154e9)__

今回は、TelloからMacbookに向けて送られてくる、Telloの状態に関する信号を(Macbook側で)しっかりと受け止めて、MacbookのTerminalに出力する機能を追加してみました。

今後はさらに、Telloに搭載されている単眼カメラから送られてくる画像データも、Macbook側で受信して、ウィンドウに出力表示する機能も盛り込んでいきたいと思います。その際、Tello-PythonやTelloPyといったライブラリを使わずに、Macbook側でポート 11111のUDPサーバを立てて、OpenCV2のimshowメソッドで画像フレームをリアルタイムに表示する部分を、フ

元記事を表示

PythonとOCRエンジンで画像から文字を認識する

# 目的
anacondaの仮想環境内でtesseractとPyOCRを使い、画像から文字を認識できるようにします。
今回は画像の文字を認識し、ターミナルへ出力できるところまでの行います。

こんな感じ↓
![mokuteki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621838/bde33c97-7e49-5cc6-9a80-6ce7efa5f611.png)

# 環境
python 3.6
tesseract 4.1.1
PyOCR 0.8

# 手順
### ツールのインストール
anacondaの仮想環境に下記2つをインストールします。

・文字認識のためのOCRエンジンである`Tesseract OCR`をインストール
https://anaconda.org/conda-forge/tesseract

“`terminal
conda install -c conda-forge tesseract
“`

・PythonからOCRエンジンを使用するための`PyOCR`をイ

元記事を表示

Python3: base64 変換して JSON になった画像を復元

次のような JSON を処理します。

“`text
{“base64”:”/9j//gAkWACmDwAAAAAAA **** “}
“`

“`py:decode.py
#! /usr/bin/python
#
# decode.py
#
# Feb/28/2021
# ——————————————————————–
import sys
import json
import base64
import numpy as np
import cv2
#
file_in = sys.argv[1]
file_image = sys.argv[2]
sys.stderr.write(file_in + “\n”)
sys.stderr.write(file_image + “\n”)
#
fp_in = open(file_in,encoding=’utf-8′)
json_str = fp_in.read()
fp_in.close()
#
dict_aa = json.load

元記事を表示

DRFの仕組みを追ってみる ①ルーティング

# 今回やる事
Djangoの流れはなんとなく掴めたが、よく使うDRFは具体的にどんなところを拡張しているフレームワークなのかが気になり始めたので、ひたすら実装を追いつつまとめていきたいと思います。

サーバーが立ち上がるところはDjangoと変わらないと思うので、まずはルーティングあたりから追ってみます。

# 環境
djangorestframework 3.12.2
python 3.7.9

# DRFとは?
まず、DRF(django rest framework)とはDjangoでRESTfulなAPIを簡単に作れるようにしてくれるフレームワークです。
RESTとは、REpresentational State Transferの略で、Webサービスの設計モデルの事です。

RESTについてはこの記事がとても参考になります。
[REST入門 基礎知識](https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa)

記事から引用しますと、

> ●アドレス指定可能なURIで公開されていること
> ●インターフェース(HT

元記事を表示

【Python】tkinterさんを忘れずに使いたい

本日もお疲れ様です。

皆さんは数多のPythonのライブラリを扱いますか?(Go〇gle翻訳風)
数々のライブラリを扱い「あ、久々に〇〇また使おうかな~」となった時、
どんな機能があるかは覚えているものの**「肝心の書き方をイマイチ思い出せないッ…!」**
みたいなこととかありませんか?

僕はあります()

今回はよく使う「tkinter」についてまとめ、
今後そのようなことがあっても困らないようにしておきます。

***
### 今回の環境
– Python3.9(2系だと書き方が異なるので注意)

***
### ① 好きなアイコンを設定してダイアログを出そう

“`python:tkinter_test.py
#! coding: utf-8

import os
from tkinter import *
from tkinter import ttk

def main():
root = Tk()
root.title(u”TKDialog Test”)

img = PhotoImage(file = os.path.join(os.getc

元記事を表示

TelloEduで2機編隊飛行 〜 両機が反対方向の行動を取るようプログラミングしてみる(成功)

__過去2本の記事__の続編に続いて、いよいよ2機のドローンに対して、Macbook PCから同時に操作コマンドを送信してみます。__2機とも、離陸から着陸まで、意図した通りに動作しました。__

– __[前回の記事](https://qiita.com/electronics_diy721/items/0bc7837eb2eb70933a93)__
– __[前々回の記事](https://qiita.com/electronics_diy721/items/781a1d9dc89802072add)__
– __[最初の記事](https://qiita.com/electronics_diy721/items/0b9dd5127870ecba75b5)__

###行ったこと

Wifiルータ経由で、Macbook PCのTerminalに打ち込んだ操縦コマンドを、同時に2機のTelloEduドローンに送信して、操作に成功しました。

Terminalに打ち込む操縦コマンドは、1機目に対するコマンド指令だけです。
2機目のドローンは、1機目に与えられた指令と、一部反対の行動を

元記事を表示

OTHERカテゴリの最新記事