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

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

Pyflow使ってDjangoが使える環境を作る

# はじめに
Pyflowを使いながらDjango環境構築方法が探してもなかったので、どうやってやったのかここにメモします。

# Pyflowとは

> ***引用***
Pyflow はおそらく一番新参のパッケージ管理ツールです。Rust で書かれており、Poetry で導入された PEP 518 に加え、PEP 582 で提案された、プロジェクト内で扱える仮想環境を複数の Python バージョンに対応させることができます。Pyenv + venv で 1 つの Python のパージョンの 1 つの仮想環境を扱う Pipenv/Poetry に対して、Pyflow は単体で Python のバージョンを複数管理して任意のバージョンで仮想環境を作ることができます。現環境で大きな恩恵は無い気もしますが、今後 Python にメジャーアップデートがあった場合などに重宝されるかもしれません。個人的な懸念は Rust で書かれていることで、速度等で恩恵がありそうな一方で、Rust にある程度の理解がないとエラーメッセージに対応しづらい点と、開発コミュニティが伸びにくいということです。
>

元記事を表示

【Python-docx】超面倒臭い、NDA作成を10秒で処理した話!

NDA(Non Disclosure Agreement)作成の話です。
21世紀のビジネスマンには、避けて通れない話題です。
私も、朝から晩まで、潜在顧客とのNDA締結作業をしております。
(営業交渉よりも、NDA締結の方に時間が掛っております。)

このNDAですが、会社ごとにフォーマットが違います。
ただ、ネットに転がっているサンプルとしては、例えば、下記です。
https://legaltemplates.net/form/non-disclosure-agreement/

![0715x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/96b14091-65f8-bb47-6dbc-ae18639fe3cf.jpeg)

1.何が問題か? なぜ時間が掛るのか?

例えば、「日付」、「Disclosing Party」、「Receiving Party」を記載するのに、
いちいち、ワードを開いて記入しないといけません。
このワードに記入する作業ですが、実際に何通もNDAを書いて

元記事を表示

QGISにpandas&geopandasをインストールしたくないけど、機能は使いたい

# はじめに
この記事ではQGISのプラグイン開発を行うにあたって、
**「geopandasの機能が使いたいけど、ユーザーに煩雑なインストール作業を強いたくない!」**
という願いを叶えるための記事です。

ユーザーがインストール作業することに抵抗がない場合は、
以下の記事の方がスマートだと思います。

https://qiita.com/ozo360/items/87334983e7e9b95d50e9

# まず結論
先に結論を言いますが、この記事では
**pandas&geopandasの機能を使った処理のみをexe化して、プラグインからexeを実行させる**
という方法で実現しています。

「exe化はしたくない」という縛りがある場合、この記事では解決しません。
あしからず。

# 実行環境
– Windows10
– QGIS 3.16

# geopandasの処理をexe化する
### geopandas処理を含む部分だけを別ファイルにする
exe化をするにあたって、まずはgeopandasの機能を使っている処理を
関数にしておき、別のpyファイルに保存します。
この時

元記事を表示

eval関数を使わずに四則演算式を解く

# はじめに
タイトルにある通りです。
少しだけ詳しく解説します。
最初はeval関数を全く知らず、知ってる知識だけで解いてみようと思ったのがきっかけです。
プログラムが完成した後、どんなアルゴリズムがあるのかなって調べてみたらeval関数なるものを見つけて、あまりにも簡単に答えが出せてしまったので笑ってしまいました。

# 問題
以下の計算式が文字列として与えられたとき、解を求めよ。

“`
‘(((3+1+6+2+3+1234+234+8)/3)+2*235-442+2312)/9+6*(3)+(1+1+1*5/90)=’
“`

# 回答プログラム
### 割り算を掛け算に、引き算を足し算に
与えられた式を一つずつ見ていき、以下の表のように対応します。

|変換前の四則演算記号|変換後の四則演算記号|備考|
|:—:|:—:|:—|
|/|*|変換後の数字は分数にする|
|-|+|変換後の数字の前に「-」をつける|

“`python
def chg_subtosum_divtomul(formula):
tmp_list = []
tmp_nu

元記事を表示

Pythonで音付き動画を作る方法

# Pythonで音付き動画を作成
Pythonで音付きの動画を作成する方法です。なかなか調べても出てこなかったので、ここでまとめておきます。

## 候補1: opencv

pythonで動画や画像を扱うとき最も一般に使われるものは、おそらくopencv(cv2)だと思います。しかし、どうやらopencv単体では音声付の動画を作成することはできなさそうです。

## 候補2: pyav

音付きの動画から、以下のコードで音声つき動画を作成することが出来ました。
以下は[公式サンプル](https://pyav.org/docs/develop/cookbook/basics.html)を少し改変して音声付き動画を作るように変更したものです。

“`python
import av
import av.datasets
import numpy as np

input_ = av.open(“./videos/01_smile.mp4”)
output = av.open(‘./videos/sample02.mp4’, ‘w’)

# Make an output strea

元記事を表示

【 Tello 】右斜め前や、右斜め前上方への直進は、RCコマンドが吉

TelloのAPIには、*left*, *right*, *forward*, *back*, *cw*m *ccw* 等の操作コマンドとは別に、*rc*というコマンドがあります。

– [(参考) Tello操作コマンド 日本語版 「Drone an どろね庵」](https://drone-an.pro/tellosdk_trans/04_tello_commands/)
– [TELLO SDK 2.0 User Guide](https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf)

これは、__*rc 左右 前後 上下 ヨー角*__という__4つの引数__をとります。

このコマンドを使うと、これまで、次の図の左側のように、Telloを操作していた世界から、右側の世界に移行することができます。

![スクリーンショット 2021-07-14 17.59.18.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

インスタをPythonで自動化してみる

#目標
インスタのアカウント育成を自動化したい

#インスタ 自動化 Python
これで検索するとこちらの記事が出てきました。

https://oretano.com/instagram-python-like

自動でいいねしてくれるプログラムです
今回はこれを元に

– 自動いいね(ちょっと改良)
– 自動フォロー
– フォロバされてない人の自動フォロー解除
– 自動ブロック

を作っていこうと思います。

必要な準備は上記のサイトにすべて記載されてるのでこちらには書きません

#自動いいね(ちょっと変えました)

“`
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.action_chains import ActionChains
import time
import random, sys

def login():
driver.get(‘https://www.inst

元記事を表示

`python3 -m pip install PyQt5`実行時にエラー

`python3 -m pip install PyQt5`実行時にエラー

“`
$ python3 -m pip install PyQt5
Collecting pyqt5
Using cached https://files.pythonhosted.org/packages/8e/a4/d5e4bf99dd50134c88b95e926d7b81aad2473b47fde5e3e4eac2c69a8942/PyQt5-5.15.4.tar.gz
Installing build dependencies … done
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File ““, line 1, in
File “/home/ubuntu/.pyenv/versions/3.6.9/lib/python3.6/tokenize.py”, line 452,

元記事を表示

ドローン・プログラミングでTelloを無人自動飛行してみた(Python3)

__[前回の記事](https://qiita.com/electronics_diy721/items/f9f4b1f87e83801154e9)__の続編です。

###全体の構成

![スクリーンショット 2021-07-13 16.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/74306c50-bbb4-4584-0fab-d4f31dcbc147.png)

前回は、MacbookのTerminalに、人間が手入力で”takeoff”, “forward 100”, ・・・, “land”と、Tello APIで提供されているコマンドをひとつひとつ入力していました。

MacbookからWifi通信でTelloに命令を送れるようになったものの、これだと、同じくWifi通信で、iPhone/ iPadの画面に表示されたバーチャル・ジョイスティックで操作した方が、操作しやすいです。

そこで今回は、一連の飛行動作を、あらかじめスクリプトに記述(列挙)して、人間は手放し

元記事を表示

Django でモデルフィールドの値を暗号化してくれる EncryptedField を作成する方法

##はじめに
業務でDjangoで作ったシステムのデータを暗号化してDBで保管するという
タスクに携わったので、その方法を記事にしたいと思います。

###この記事で触れること
* Modelの値を暗号化してDBに保存してくれるEncryptedFieldの作り方
* 既存のデータの置き換えについて
* マイグレーションの挙動について

###この記事で触れないこと
* Pythonで暗号化をする方法
* saveメソッドを継承して暗号化をする方法

###環境
Django3.0.1
python3.9
暗号化ライブラリ: PyCryptodome

##結論と説明
こちらがメインのコードです。
encryption decryptionは暗号化・複合化の関数となります。

“`python:myfield.py
class EncryptedFieldMixin:
“””
Djangoのモデルフィールドを、DB登録時に暗号化するように
変更するMixin
戻り値が str のため、models.BinaryFieldなどには使えない
“”

元記事を表示

Python ランダムな数列を作成する方法。重複有無、全列挙

## 指定した範囲を列挙する

rangeを使えば、範囲の数列を作ることができます。

“`py
lst = list(range(0, 10))
print(*lst)
# 0 1 2 3 4 5 6 7 8 9
“`

## 指定した範囲から、重複のないランダムな数列

random.sampleを使用して、重複のないランダムな数列を作れます。

“`py
import random

lst = list(range(0, 10))
print(*random.sample(lst, len(lst)))
# 8 9 7 6 0 3 1 2 5 4

# 別の書き方
lstlen = 10
print(*random.sample(list(range(0, 10)), lstlen))
“`

## 指定した範囲から、重複ありでランダムな数列

“`py
import random

lst = list(range(0, 10))
print(*random.choices(lst, k=len(lst)))
# 2 4 7 5 6 1 7 9 3 2

# 別の

元記事を表示

Pythonで複数のDataFrameをExcelにシート別にfor文を使って出力してみる

### DataFrameが複数存在した場合にエクセルにシート別で出力できるのかなという疑問から

– VBAしか触ったことがなかったのですが、多岐に自動化できるようになってみたい思いからpythonプログラミングの独学を始めてみて3か月ちょっとの者です。
– コロナ関連の各自治体が出している報告pdfをtabulaで取得してdfに格納していくことに楽しさを感じたので ついでにExcelにシートごとに出力する方法を調べてみたいなと思いながらも調べ方が悪く適当な方法を見つけられずにいましたがもう一度資料参考をしながら作成してみたところうまく出力されたので自分の覚書も兼ねて投稿します。

##### 環境
– windows10 pro 64
– python 3.9
– tabula-py 2.2.0
– pandas 1.3.0
– jupyter-lab 3.0.13
– Excel2019

### コード

“`python

import pandas as pd

#あとでファイル管理がしやすいように変数日付4桁を作成
datestr = input

元記事を表示

MacBookのTerminalに、Telloの操縦コマンドを手入力して遠隔操作してみた

###参考にしたサイト

– [縣 佳男 (株式会社日本システム技研) 「Pythonからドローンを操作してみる話。」](https://www.wantedly.com/companies/jsl2/post_articles/184669#_=_)

###全体の構成

![スクリーンショット 2021-07-12 14.53.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/b43ae4ad-6908-6217-eaec-d37f571d0ca0.png)

####( ① TelloとMacbookとのWifi疎通確認 )

– Wifi親機(Host): Tello本体 (※)
※ Tello本体内には、Wifiルータが標準仕様として内蔵されている

– Wifi子機(Client): MacBook
– MacBookのWifi接続先一覧から、Telloのアクセスポイント(AP ※)を探して、選択。
※ Tello内蔵のWifi APの(local) IPアドレスは、$

元記事を表示

【AtCoder】ABC209をPython3で解説

ABC209の解説。

https://atcoder.jp/contests/abc209

## A – Counting
### 解説
$A$以上かつ$B$以下の整数はいくつあるか。

そもそも$A$が$B$よりも大きかったら、満たされる数がないので$0$を出力。

$A$以上かつ$B$以下なら、整数の個数は、$B$から$A$を引いて$1$を引いた数。

### コード
“`python
a, b = map(int, input().split())

if a > b:
print(0)
else:
print(b-a+1)
“`

## B – Can you buy them all?
### 解説
所持金$X$円で、$N$個の商品を買うことができるか。なお、$A_i$で$i$が偶数のときは、1円引きで商品が買えるものとする。

偶数のときに1円引きされるので、$N$個の商品の合計金額から、偶数の数ぶん1円引いてやれば良い。

### コード
“`python
n, x = map(int, input().split())

alist = lis

元記事を表示

[Python3] Apple Silicon M1 にてgrpcioのインストール時にエラーが発生する問題の解決

## 事象

“`bash
pip install grpcio
“`

## エラーログ

“`python
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -D_WIN32_WINNT=1536 -DOPENSSL_NO_ASM=1 -DGPR_BACKWARDS_COMPATIBILITY_MODE=1 -DHAVE_CONFIG_H=1 -DGRPC_ENABLE_FORK_SUPPORT=1 -DPyMODINIT_FUNC=extern “C” __attribute__((visibility (“default”))) PyObject* -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 -Isrc/python/grpcio -Ii

元記事を表示

Twitter Botで長い文章をツイート可能ギリギリの長さに調節する

# はじめに
TwitterのBotを作っていると、ツイートしようとしたときに次のようなエラーが返ってくることがあります。

“`text
[{‘code’: 186, ‘message’: ‘Tweet needs to be a bit shorter.’}]
“`

これは、Twitterの文字制限をオーバーしている、というエラーで、
日本語では140文字、英語だと280文字までしかツイートできません。
さらに、urlは22文字として換算される、とか、まあいろいろな例外もあるのですが、
そのような解説は[他の記事](https://qiita.com/PND/items/17e87b8839c9099d2e70#url-%E6%8A%BD%E5%87%BA)に譲るとして、
実運用ではどのようにして文字数制限を回避すればよいでしょうか。

例えば、青空文庫に掲載されている、日本の名作とその書き出しをツイートするボットを開発する場合、
下の画像のように、書き出しを制限ギリギリにする方法を本記事では紹介します。

![image.png](https://qiita-image

元記事を表示

pyinstallerのメモ

## 作成するときは仮想環境で

普通に作成したらexeの実行から動き出すまで、
10秒以上かかりフリーズしたのか心配になりました。

仮想環境を作成してそのままexeファイルを作成すると
必要なライブラリのフォルダが少なくなるのか軽くなりました。

参考
https://qiita.com/plumfield56/items/3296b24fea4ea5bbbbcf

## pandasを使うときは–hidden-importオプションをつける

この記事を参考にしました。
https://stackoverflow.com/questions/47318119/no-module-named-pandas-libs-tslibs-timedeltas-in-pyinstaller

私の場合は下記のエラーが表示されました。

“`
no module error named ‘pandas._libs.tslibs.base’
“`

なのでexeファイルを作成時に下記のコマンドへ変更したら問題なく動くようになりました。

“`
pyinstaller –onedir

元記事を表示

仮想環境の作り方

何度か目のチャレンジです。
Anaconda Promptを使ってvenvで仮想環境を作っていきます。

実行環境はWindows10で、MacやLinux環境だとvenvで作られるファイル名や
仮想環境への入り方が異なるみたいです。

## 仮想環境の作成

参考の公式サイト
https://docs.python.org/ja/3/library/venv.html

まずは仮想環境を作りたいフォルダまで移動します。

“`bash:ディレクトリの移動
$ cd パス
“`

そこで仮想環境を作成します。

“`bash:envという仮想環境に必要なファイルが入ったフォルダを作成
$ python -m venv {ファイル名}

# 例
$ python -m venv env
“`

すると今いるディレクトリにenvフォルダが作成されます。
Windowsの場合は下記で仮想環境に入ります。

“`bash:仮想環境に入る
$ .\env\Scripts\activate
“`

下記の表記に変われば成功です。

“`
# 仮想環境前
(base) C:ディレクト

元記事を表示

Django REST frameworkのユニットテスト

単体テストをExcelとかに絶対に管理したくないマンなのでテストの機能が備わっているものなら是非とも使いたい。
Pythonもとい、Djangoにもしっかりテストの機能はついている。

もちろんDjangoのテストの記事なんていっぱいあるのだが、どれを真似してもなんかAPIが上手く動かない…

冷静に考えたらREST framework使っているのに普通のDjangoのテストを参考にしても上手くいかないよね。
というわけで個人的な備忘録として記載していく。別に[公式ページ](https://www.django-rest-framework.org/api-guide/testing/)をつど見るのもいいんだけど~~英語ってあんまり読みたくないじゃん~~
一応ソースも[github](https://github.com/always-reach/django_unittest)で公開中

モデルの準備

とりあえずモデルを準備

“`models.py
class SampleTable(models.Model):
name = models.Cha

元記事を表示

Django初心者がつまずいたmodelsを変更した際にmigrateができない!?

環境
macOS Big Sur
python 3.8.5
django version 3.0.5

Djangoでデータベースを作成する際に便利なmodelsですが、変更や修正を加えた時にちょっと難しいなと思った場面があったので記事にまとめてみました。

まず現在のテーブルに入ってるカラムに新しいカラムを追加をする更新は簡単にできるみたいなのですが、
現在のテーブルにあるカラム自体に変更を加えると何やらめんどくさいことになるようです。
(例えばカラム名を変更したり、カラムのfieldを変更したり)

※詳細はこちらのサイトをご参考ください

なので大胆に仕様変更する場合には一度migrationフォルダにあるinitial.pyを削除してmakemigrationsした方が早いことが分かったのですが、ここで問題が発生!

makemigrationsはできるけど…migrateができません…
![スクリーンショット 2021-07-10 19.37.29.png](htt

元記事を表示

OTHERカテゴリの最新記事