Python3関連のことを調べてみた2020年10月13日

Python3関連のことを調べてみた2020年10月13日
目次

【Django】どうしても別アプリのテーブルを使いたい場合の逃げ道を丁寧に解説する

#はじめに
別アプリのテーブルを使う方法について調べるのに少し時間がかかったので記事にしておきます。

#解決方法
やり方は大きく二つあります。
###1.使用したいテーブルのmodelをimportして使用する
今回解説するのはこちらの方法。

###2.アプリを統合してしまう
テーブルを共有したいアプリ同士を[一つのアプリとして統合してしまいます](http://coinbaby8.com/django-folder-structure-idea.html)。
Djangoの基本思想である「各アプリ同士は依存関係を持つべきではない」というルールに則ると**こちらが正攻法です**

簡単に説明すると、アプリABがあった時、Aのアプリ上で定義されたテーブルをBが使用するということは、B

Python3のExecutor.submitを大量に実行するとメモリを多く消費する場合がある

参考にしました: https://www.bettercodebytes.com/theadpoolexecutor-with-a-bounded-queue-in-python/

概要
———-

Executorでmax_workersを指定すると並列度が調整できますが、並列数を上回るペースでsubmitした場合にどうなるかというとブロックは起きません。その代わりメモリにため込むようです。この動きのため、大量に実行するとメモリを多く消費してしまうことがあります。

“` py
with ThreadPoolExecutor(max_workers=10) as executor:
for i in range(0, 1024*1024): # たくさん
executor.submit(fn, i) # つくる
# forループはすぐ終わるが、消費メモリがすごいことになっている
“`

実際、100万ループするようなコードを書くとメモリを2GBぐらい消費します。なので、対応を考えることにしました。

内部実装と原因

PythonでTwitterのツイートをしてみたいけどハマった話

自動でTwitterのツイートをしてみたいという話を聞いて、ちょっと作ってみたがハマった話

#CONSUMER_KEYがない

色々なサイトを見て検索するとpythonからツイートをするにあたって必要な項目が4項目あります。

CONSUMER_KEY, CONSUMER_SECRET,
ACCESS_TOKEN, ACCESS_SECRET

が必要と出てくるのですがどう見てもCONSUMER_KEYとCONSUMER_SECRETがない!

![スクリーンショット 2020-10-10 16.10.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372649/051a08fd-c851-3828-8fbf-629261c67089.png)

ただ、どうやっても見つからないので検索すると

CONSUMER_KEYはAPI KEYで
CONSUMER_SECRETはAPI_key_secretでいいそうです。

検索すればよく見るコードですが下記のコードに変数を変更しました。
このほうが理解

PyTorchによる基本的実装まとめ

#0. はじめに
本記事では,PyTorchを用いた基本的な実装を書き纏めておきます(備忘録も兼ねて).CIFAR10(カラー画像の分類セット)の分類を例に.

#1. 掲載しているプログラムについて
##1.1. MITライセンス
Copyright 2020 shun310

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom

レンタルサーバのサブドメインを使って、Webアプリのバックエンド処理をPythonでホスティングする方法

Xserverで独自ドメインに追加したサブドメインを使って、Webアプリのバックエンド処理をPythonでホスティングする方法です。GCPやAWSなどクラウドでホスティングする方法が最近は一般的だと思いますが、今回は費用と性能を鑑みてXserverで行います。

細かい部分については既にこの上ない記事がいくつもあり、記載しても劣化したコピーとなってしまうので割愛しますが、サブドメインでAPIを作るという部分については特になかったのでここでは流れに注力して記載します。自分のメモようなのであしからず。

なお、Xserverの独自ドメインは既にあるものとします。

## 最終的にしたいこと
(私の場合)既にある
https://np-sys.com/
にサブドメインを追加して、
https://APIs.np-sys.com/APIを格納するフォルダ名/Flaskで定義したURLのスラッグ (末尾)
という形でバックエンド処理を走らせるようにする。当然ドメインはお好きなもので。

## 使用するツール
Xserverに自分で入れたPython
PythonのFlaskライブラリ

## 流

C言語、Pythonによるソケット通信

# C

C言語によるソケット通信のサンプルプログラムです。
ここでは、実験用に、1台のコンピュータでできるように、クライアントからループバックアドレス127.0.0.1に繋ぐようにしています。
あるウェブサイトを参考にしましたが、何処にあるか忘れましたので、言及出来ませんが、
初心者覚書です。

# ソースコード
sserver

“`sserver.c
#include
#include
#include
#include
#include
#include

int main() {
int sockfd;
int client_sockfd;
struct sockaddr_in addr;

socklen_t len = sizeof( struct sockaddr_in );
struct sockaddr_in from_addr;

char buf[1024]

【Django】modelを使わない画像ファイルアップロード機能を実装する

#はじめに
Djangoアプリで画像ファイルをアップロードする場合ImageFieldを使用してDBに保存するのが定石だと思います。
しかし、先日実務で作ったアプリは他システムとの統合の都合上**DBではなく特定のフォルダにファイルを保存する必要があり**、その方法を調べるのに少し時間がかかったので記事にしておきます。

#結論
**forms.ImageField**を使用して実現可能です。

#サンプル
以下、最小構成のサンプルです。

トップページ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/2a73ef48-ab98-7f31-9737-3a8d59df6fa4.png)

適当な画像ファイルを選択して送信すると画面が変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663118/f2f5fe25-8b08-e0f0-0e2e-5c04393453c1.p

PythonでGoogle Fit APIのデータを取得する

## 概要
Google Fit APIでデータを取得する際、OAuth2を使う必要がある。
OAuth2を使ってデータを取得する際、google-api-python-clientを使用するのが便利である。
google-api-python-clientを使用してデータを取得する方法を以下に記載する。

## 作業手順
1. 自身のスマホでGoogle Fitアプリをインストール
2. Google API Console でGoogle Fit APIを有効にし、jsonファイルをダウンロード。(ファイル名はoauth2.json)
– 詳細にまとめていただいている記事があるので下記を参照
– [GoogleFitのデータをC#で取得してみた!](https://qiita.com/tsumasakky/items/39853ee3680b1ce227e5#apiの有効化)
3. google-api-python-clientを下記コマンドでインストール
`pip3 install google-api-python-client`
4. 下記ソ

Gitログを整形して、コミットしたファイル名をcsv形式で取得する

### 目的
gitのコミット情報をcsv形式で取得したかったが
git logの–pretty=formatのオプションでは、私が欲しかったフォーマットで取得できなかったため、 一度ログを出力した上でログの整形を行うようにした。

### 環境
OS Mac Catalina
Pycharm CE
python 3.7

### 準備
#### gitログの取得
GitBashなどのコンソールで叩くとログファイルが出力される。
“`git –no-pager log –name-status –no-merges –all \
–date-order –date=format:’%Y/%m/%d %H:%M:%S’ > git.log“`

##### 取り込む想定のgitログ

“` git.log
commit f36da445d06d2db7b4f08a508be835f5464ded
Author: nomori
Date: 2020/10/10 23:50:29
first commit.
A .giti

【python】二次元系 点図形内外問題

考え方は[こちら](https://qiita.com/ShotaSuzuki-jr/items/9757938c520c9ef067b6)をクリック
#環境
python3.7
#問題
以下のような図の__点P__が図形の中か外かを計算する。
![triangle.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676731/24a7551c-4cd5-8882-16aa-e9edd20de6da.jpeg)

__O(0,0)__は__原点__を表している。また、__A(2,2)__、__B(3,1)__、__C(3,3)__は__図形の頂点__を表している。__P(x,y)__は__任意の点__である。
#計算
下図のように__外積の向きが同じ__になるように計算する。
![triangle3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676731/821e1c

TensorBoard at http://localhost:6006/

“`
$ tensorboard –logdir ./
“`
と打ち、

“`
TensorBoard 2.2.1 at http://localhost:6006/ (Press CTRL+C to quit)
“`

が出力されたが、
`http://localhost:6006/`で__tensorboardが見れない__とき。
#環境
自分のPCはwindows
リモートサーバーはlinux
#経緯
__putty__を使い__リモートログイン__をしてサーバーにログインした。
そこで__tensorboard__を使った。
アウトプットされた__サイトにアクセスできなかった__。

#解決策前提
__user__名__remote__で__サーバー__名__server__を使ってリモートログインする。

“`
remote@server’s password:passward
“`

__現在のディレクトリ__に入っている__tensorboard__を起動。

“`
[remote@server ~]$ tensorboard –logdir ./
Se

__call__とは

__call__とは、クラスのインスタンスを関数として扱うことができるものです。

“`python
class Print:
def __call__(self, a):
print(a)

b = Print()
b(‘aiueo’)
“`

出力

“`
aiueo
“`

【Django】QuerySetを辞書型(dict)のlistに変換する

#はじめに
modelから取得したデータをQuerySet→dict要素を持つlistに変換してあれこれしたかったのですが、意外とすぐに情報が出てこなかったので投稿します。

#結論
以下でOKです。

“`python
from .models import Choice

choice_query_set = Choice.objects.all() #QuerySet型で全件取得
choice_list = list(choice_query_set.values())
print(choice_list)
#[{‘id’: 1, ‘question_id’: 1, ‘choice_text’: ‘test1’, ‘votes’: 3}, {‘id’: 2, ‘question_id’: 1, ‘choice_text’: ‘test2’, ‘votes’: 1}, {‘id’: 3, ‘question_id’: 1, ‘choice_text’: ‘test3’, ‘votes’: 2}]
“`

#解説

“`python
from .models import Ch

numpyでファイルに要素を書き出し確認したい。

#配列の結合などで、思わぬエラーになり、ファイルに要素を書き出して確認したいがデフォルトではfloatなのでうまくいかない。

np.savetxtで、fmt=”%d”を指定して書き出す。

“`
np.savetxt(“a.csv”, target, fmt = “%d”)
“`

Pytorchで学習済みモデルの一部のレイヤーをtransferしたいときに役立つfunction

Pytorchで学習済みのモデルの一部のレイヤーをfine-tuningやtransfer-learningで使いたいと思ったときに詰まったので備忘録として残します。
といっても、
> [How to load part of pre trained model?
](https://discuss.pytorch.org/t/how-to-load-part-of-pre-trained-model/1113/16)

こちらのディスカッションで出た方法をパクって、functionにしただけです。

#どういうシチュエーションでつかうか
学習済みモデル(.pth)があって、その一部分を含んだ新しいモデルを作りたいときにつかいます。
(僕の場合、Convolutional AutoEncoderのEncoder部分に、学習済みのCNNの重みをロードしたかった)

#コード

“`
def filtered_load_model(model, pretrained_dict):
pretrained_dict = pretrained_dict[‘model’]
mod

性懲りもなくPythonでLOTO6に挑む

## まえがき

えぇ、もう既に分析され尽くして特にこれと言ってめぼしい結論が出てないことは知ってます。それでもPythonの勉強がてらちょっとやってみようかなと。

## 開発環境

– Python : 3.8.3
– BeautifulSoup : 4.9.2
– resuests : 2.24.0
– Visual Studio Code : 1.49.3

## 過去データ取得

手動コピペなどやってられないのでスクレイピングしてくることにしました。本日(20/10/09)時点の最後のデータは第1524回です。

尚、LOTO6では本数字6コとボーナス数字1コが抽選されますが、今回は本数字のみで勝負します。抽選される数字は1~43で重複することはありません。

“`Python:scloto6.py
import requests
from bs4 import BeautifulSoup

r = requests.get(‘http://hogehoge.com/loto6/data/list1/’)
soup = BeautifulSoup(r.content, “h

pythonでPDFをfoxit readerを利用してプリンタ指定サイレント爆速印刷しよう!

## 開発環境
os:windows10
言語:python3.7
使うソフト:foxit reader

## foxit readerのインストールについて
窓の社さんから無償版をダウンロードすると楽です。
https://forest.watch.impress.co.jp/library/software/foxitreader/
公式サイトからダウンロードしようとすると無償版(閲覧・印刷のみ)のものでもメールアドレスなどの登録が必要みたいです。

## 自分の中で必要だった印刷要件
・少し複雑な形式の書類も大丈夫。
・印刷スピードが早い(1秒)
・単純な手順であること。

## pythonの印刷方法

win32
直接テキストデータを送って印刷するものしかなかった。
adobe PDF Reader
adobe PDF Readerのコマンドを使って印刷するもの。
下記の記事を参考に作成。
https://qiita.com/hrs_sano645/items/e0fcf5d896b70822e998
当初は

PyPIへのモジュール公開手法がいろいろ変わっていたのでメモ

PyPIへのモジュール公開手法がしばらく見ない間にだいぶ変わっていたので備忘録としてメモしておきます。

# 何を公開したの?

こちらです。

* [tksugar · PyPI](https://pypi.org/project/tksugar/)

いまのところドキュメントと言えるドキュメントはGitHubだけです

* [TakamiChie/TkSugar: A module that generates a structured Tk window frame from a text file\.](https://github.com/TakamiChie/TkSugar)

# setup.cfg

わたしが昔PyPIを触っていたときは、`setup.py`にいろんな設定を書き込むことで、モジュールの設定を記載していたのですが、今は`setup.cfg`というファイルにモジュールの情報を書き込むようになったようです。

“`config:setup.cfg
[metadata]
name = tksugar
version = attr: tksugar.__vers

【自動録画】伊藤塾のストリーミングを自動で連続再生する【Selenium】

#はじめに
伊藤塾のストリーミングを外で見たい時にギガを消費するのが嫌なので自分用にバーっと一気に書きました。
寝てる時に録画してます。
1.ストリーミングの動画サイズを小にして下さい
2.Bandicam等の録画ソフトを使って同じ位置で録画し続けて下さい。
(次の動画はjsで初期位置が同じ、サイズが小で再生されます。録画ソフトを固定してひたすら動かしておけばよいです)
__3.コース購入者が自分のために使用して下さい。ストリーミングの視聴権は購入した個人のみです。(当たり前ですが……)__
4.Seleniumの詳しい説明はググって下さい ChromeでF12が使えれば大体使えます。

OS:Windows10
GoogleChrome バージョン: 85.0.4183.121(Official Build) (64 ビット)
Python:3.70
Selenium Webdriver:この記事を書いた時点で最新のもの
chromedriver.exe:この記事を書いた時点で最新のもの

※スクリプトと同じフォルダに’chromedriver.exe’を置いてください。

“`p

ヨドバシドットコム購入明細メールの商品一覧から商品名と価格を抜き出す

表題の通り、ヨドバシドットコムの購入明細メールから、商品名と価格の組み合わせを取得するプログラムを、Pythonで書いてみました。クリップボード履歴ツールの活用方法と、Pythonのモジュール、PyPerclipとzip関数の利用例にと思ってくれたら幸いです。

説明が要らない という方はこちらをどうぞ

* [ヨドバシドットコム購入明細メールの商品一覧から商品名と価格を抜き出す](https://gist.github.com/TakamiChie/ac0c84727288487198562e87eeb9bec2)

# 動機など
わたしはZaimを使って家計簿を作成しています。レシートを撮影して明細を登録できるほか、Amazonなど一部のサイトでの購入情報を自動的に登録できるため便利です。

しかしこのZaim、残念ながらヨドバシドットコムとの連携には対応していません。このため、ヨドバシドットコムを多用するわたしは買い物履歴を登録するのに毎回苦戦していました。

そこで、ヨドバシドットコムでの商品購入時に届く「ヨドバシ・ドット・コム:ご注文ありがとうございます」のメールに書かれてい