- 0.0.1. werkzeug.securityでハッシュ化
- 0.0.2. Pythonでつくる対話システム_備忘録_Part01
- 0.0.3. TkinterでGIFを動かす
- 0.0.4. TypeHintがPythonの高速化に貢献していくとよいな
- 0.0.5. Pythonで黒歴史晒して優勝する。
- 0.0.6. 【Python】Flask HTTPメソッド4種
- 0.0.7. pythonの文字列操作
- 0.0.8. 【Django】アプリ別にurls.pyを分ける方法
- 0.0.9. VOICEVOXに英語を読ませる(カタカナ英語)
- 0.0.10. parlaiとweb apiのように会話したい
- 0.0.11. Python JSONデータをTreeViewで表示してみた。
- 0.0.12. [Python, tkinter]画像ファイルをGUIで削除
- 0.0.13. Herokuでリダイレクトする方法(Python3・Flask)
- 0.0.14. seleniumでいろいろAPIモドキ
- 0.0.15. s3とローカルとの間でファイルの簡易同期
- 0.0.16. 【Python】Tkinterで多言語翻訳アプリを作ってみた(Part 1)
- 0.0.17. SeleniumでGoogleアカウントにログインした状態を保持する
- 0.0.18. 超初心者がe869120さんの【分野別 初中級者が解くべき過去問精選 100 問】をpythonで解いてみた!Part3
- 1. JOI 2011 予選 4 – 1 年生
werkzeug.securityでハッシュ化
werkzeug.securityでハッシュ化するコードを見て、
意味を理解したくて調べた内容を記載します。前提として全然理解できなかったです。
## werkzeug.securityの基本的な使い方
generate_password_hash関数でハッシュ化できて、
check_password_hash関数で元の文字列と同じかを判定できます。generate_password_hashで作成されるハッシュは毎回違うものになっているので、
作られて2つのハッシュを比較してもFalseになります。なので元の文字列と同じかを判定するためにはcheck_password_hashを使う必要があります。
“`py
from werkzeug.security import generate_password_hash, check_password_hashhash1 = generate_password_hash(‘hogehoge’)
hash2 = generate_password_hash(‘hogehoge’)print(hash1) # p
Pythonでつくる対話システム_備忘録_Part01
# はじめに
現在は対話ロボットの研究に取り組んでいるが,対話システムを1から自分で実装できるようにするための勉強を始めようと思い,[『Pythonでつくる対話システム』](https://www.ohmsha.co.jp/book/9784274224799/)に取り組む.# 環境
macOS: Big Sur(バージョン 11.6.7)
言語: Python 3.9.6
メッセンジャーアプリ: [Telegram](https://telegram.org/)# 第一章 対話システムを作るにあたって
[『Pythonでつくる対話システム』ソースコード&データ配布とサポートページ](https://github.com/dsbook/dsbook)から必要なコードをダウンロードして動かす.1. Telegramのインストール
1. Telegram上でBotの作成
1. アクセストークンを取得
1. telegram_bot.pyに取得したアクセストークンを貼り付け
1. echo_system.py(おうむ返しをするプログラム)を起動
1. エラーの修正
サンプルコード
TkinterでGIFを動かす
# 結論
– tkinterのPhotoImageで読み込むと残像がでる
– PillowのImageで開いた状態でseekしてImageTk.PhotoImageで読み込むと残像がでない検証してないのではっきりしていませんが、残像っていうのは、たぶん、フレームの取りこぼし
以下、
[while方式](#while方式)
[コールバック方式](#コールバック方式)の例を示します
おすすめは`コールバック方式`です
# While方式
init時にGIFのフレームを読み込む。EOFERrrorまたはExecptionとなったら全フームの読み込みが完了したことになる。
load_frameのやり方は2通りあって、1は残像はでず、2は残像がでる
“`python
from PIL import Image, ImageTk
import tkinter as tk
from time import sleep
import threadingclass GifPlayer(threading.Thread):
def __init__(self,
TypeHintがPythonの高速化に貢献していくとよいな
結論から述べると、mypycに、効果的な高速化への期待は難しいんじゃないかと思う。
ですが、シームレスに少しは早くなるのは、ecosystem的には良いことかと思います。
ただ、既にCythonが進んでいる。そのため、mypycとCythonが重複した選択肢となる。なんとか協調してより開発を進めて頂きたい。
—-
残念ながら、TypeHintを付記するだけで高速化しない(2022.07現在)。期待された人は多いかと思うが(私もその一人)。
しかし、C言語へトランスコードして高速化するmypycが開発がされています。
– https://github.com/mypyc/mypycmypycの名前でお察しの方/既知の方いらっしゃるとおもいますが、MyPyプラグインと協調して行くスタイルのようです。
メリット
1. C言語化に必要な型を指定を、デフォルト`typing`の型で指定できる。
1. つまり、TypeHintを付記する、と、その型に基づいてC言語化の際の型指定ができ、後付で型指定が不要。
1. 標準化しつつ有るMyPyで型付けされたコードを、Py->
Pythonで黒歴史晒して優勝する。
## あらすじ
今の会社に就職する前、趣味でクソアプリの製作に励んでいたことがあります。ワンちゃんの犬種を当てるクイズアプリです。
https://dachs.herokuapp.com/
具体的にどのようにクソか説明しますと、– JavaScriptを使って画像に対してonClickイベントで実装しており、正解でも不正解でも次の画像に送られない。(画像と問題が合っていない)
– 画像サイズの変更がされていないため犬種によって出題の画像サイズがまちまち。
– herokuの無料枠でデプロイされており動作が重い。
– 「サルーキ」と「ボルゾイ」、「フレンチブル」と「ボストンテリア」、「ラフコリー」と「シェルティ」のように画像からの判別が困難なものが含まれている。過去の黒歴史と決別すべく、救済策を講じようと思い立ちました。
## 具体策
Pythonを使って正解になっている犬種のワンちゃんの画像をスクレイピングします。
クソアプリの方は誰からも見向きもされませんが、スクレイピングは多くの方の役に立ちます。
読んでくださった方の一助となれば幸いです。
(今回はビーグルを例に挙げて
【Python】Flask HTTPメソッド4種
## はじめに
pythonでHTTPメソッドを扱う方法についてまとめていきます.
FlaskでREST APIを作成する際にはよく使う記述をまとめました.
初学者の方の参考になればと思います!## HTTPメソッドについて
HTTP ver1.1でのメソッド一覧は以下の通りです.### GET
URIで指定した情報を要求する.
URIがファイル名の場合はそのファイルの中身を,プログラム名の場合はプログラムの出力を返す.### HEAD
GETと同様の処理だが,HTTPヘッダのみを返す.### POST
クライアントからデータを(名前と値)のセットで渡す.
使用例:フォームデータを送る時### OPTIONS
通信オプションの通知等.### TRACE
サーバが受け取った要求行とヘッダ行をそのまま送り返す.### DELETE
URIで指定したサーバ上のファイルを削除する.### PUT
URIで指定したサーバ上のファイルを置き換える.### PATCH (Appendix)
PUTと同様の処理だが,差分のみを置き換える### LINK (App
pythonの文字列操作
python3を久しぶりに使ったらかなり忘れていたので、よく使うコードをメモとして残します。
# 文字コード変換
|目的|コード|結果|
|:–|:–|:–|
|1文字を、10進数に変換|ord(‘a’)
ord(‘あ’)|97
12354|
|10進数を、1文字に変換|chr(97)
ord(12354)|’a’
‘あ’|# 文字列-数値変換、数値判定
|目的|コード|結果|備考|
|:–|:–|:–|:–|
|数値を、10進数で書かれた文字に変換|str(97)|’97’||
|数値を、16進数で書かれた文字に変換|hex(97)|’0x61’|0xが追加される|
|数値を、2進数で書かれた文字に変換|bin(97)|’0b1100001’|0bが追加される|
|10進数で書かれた文字を、数値に変換|int(’97’)|97||
|16進数で書かれた文字を、数値に変換|int(’61’,16)
eval(‘0x61’)|97
97|
evalで式を評価する|
|16進数で書かれた文字を、数値に変換|int(‘1100
【Django】アプリ別にurls.pyを分ける方法
Djangoで開発している時にアプリが多くなると、1つのurls.pyに各ルーティングを記載していくとコードが多くなってしまいます。
この改善策として、各アプリのディレクトリにurls.pyを配置し、アプリ内のルーティングは、対象ディレクトリ内のurls.pyを使用することでルーティングを整備することができます。
そのやり方を以下に記載します
## プロジェクトのurls.py
django-admin startprojectにて、作成された最初のurls.pyは、以下のように記載します
“`python
from django.contrib import admin
from django.urls import path, includeurlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘myapp/’, include(‘myapp.urls’)),
]
“`from django.urls import pathにincludeを記載します
urlpatterns内には、sta
VOICEVOXに英語を読ませる(カタカナ英語)
VOICEVOXは英語の発音ができないが、さすがに「Cisco」を「シーアイエスシーオー」と発音するのはさすがに困る。とはいえ、膨大な単語1つずつを辞書化していくのは骨が折れる。
ということで、多少妥協して、片言でも良いので発音してもらう。
とりあえず、英単語をカタカナに変える辞書を用意。
[bep-eng.dic](https://fastapi.metacpan.org/source/MASH/Lingua-JA-Yomi-0.01/lib/Lingua/JA/bep-eng.dic)あたりをベースに、自分好みの単語を追加すれば良いんじゃないかな。“`
[root@ip-10-100-0-11 app]# tail eng.dic
PYTORCH パイトーチ
TWITTER ツイッター
SAAS サーズ
KAGGLE カグル
DROPBOX ドロップボックス
SPLUNK スプランク
SALESFORCE セールスフォース
DREAMS ドリームズ
AZURE アジュール
LEADERS リーダーズ
[root@ip-10-100-0-11 app]#
“`先のリスト
parlaiとweb apiのように会話したい
いろんなbotを作って遊んでいるが、pariaiがやはり凄いので、もっと遊びたい。
parlai(Blenderbot2)にはインタラクティブなインタフェースが用意されている。“`
Enter Your Message: What is your hobby?
/opt/conda/lib/python3.10/site-packages/parlai/core/torch_generator_agent.py:1728: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the ‘trunc’ function NOT ‘floor’). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, ro
Python JSONデータをTreeViewで表示してみた。
JSONデータで情報を受信していると、受信したJSONデータそのものをリアルタイムでそのまま表示させたいことがままあります。
json.dumpsメソッドにindent指定して、テキスト表示すれば、きれいに改行して表示すことが簡単にできます。
しかし、大量のJSONデータが全て展開されていると、所望のデータにたどり着くまでスクロールすることになります。あるいはエディタに展開して検索ですね。TreeViewで閉じられた状態のほうが便利かなと思い、今回のコードを作りました。
# データ準備
記事のために利用させていただいたJSONデータは、以下のサイトです。
[京都市オープンデータポータルサイト](https://data.city.kyoto.lg.jp/riyou/api)リクエストURLの例
https://data.city.kyoto.lg.jp/API/action/datastore/search.json?resource_id=f14b57c2-48dd-4aa7-b754-a4f4ac340f2dWEBブラウザのURLにリクエスト例を入力すると、JSON
[Python, tkinter]画像ファイルをGUIで削除
# Pythonのtkinterを用いて画像ファイルをGUIで削除
– 機械学習のデータセット作成の際など, データセットに相応しくない画像を削除するのに使用できます。## 実装
– **python**
– 使用ライブラリ
– **tkinter** : GUIのプログラムを作るのに使用
– **Pillow** : 画像を扱うのに使用## 使い方
1. [リポジトリ](https://github.com/yarakigit/rm_img_GUI.git)をクローン~~~ zsh
$ git clone https://github.com/yarakigit/rm_img_GUI.git
~~~1. ライブラリをインストール
~~~zsh
$ pip install -r requirements.txt
~~~
2. 実行
– **in_dir** : 削除したい画像があるディレクトリのフルパス
– **img_type** : 画像の種類
~~~zsh
$ python main
Herokuでリダイレクトする方法(Python3・Flask)
# TL;DR
– Herokuでは`.htaccess`によるリダイレクトが動作しなかった。
– `flask.redirect`を使ってゴリ押しする。# `.htaccess`について(不可)
[[Heroku]herokuでhttpでのアクセスをhttpsへリダイレクトさせる設定](http://kayakuguri.github.io/blog/2015/03/03/heroku-force-https/ “[heroku]herokuでhttpでのアクセスをhttpsへリダイレクトさせる設定 – KayaMemo”)など、複数のサイトを参考に以下のように作成・アップロードした。
“`.htaccess
# リダイレクトを設定する宣言
RewriteEngine on
# X-Forwarded-Protoが設定されているときに作動
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
# HOST,URIを指定して転送
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L
seleniumでいろいろAPIモドキ
seleniumを使って、httpリクエスト上げればいろいろ情報を拾ってくる機能を作って遊ぶ
かなり昔に書いたものですが、ほとんど修正無しで長期間動いているもの(=参照先Webページの仕様変更が少なく安定しているもの)を投稿。適当なwebサーバ(CGI有効化)を用意して、cgi-bin以下にseleniumを使うスクリプトを配置する。
“` python
#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
import os, http.server, socketserverPORT = 80
os.chdir(‘/app’)class handler(http.server.CGIHTTPRequestHandler):
cgi_directories = [“/cgi-bin”]
httpd = socketserver.TCPServer((“0.0.0.0”, PORT), handler)
httpd.server_name = “webscraping”
httpd.server_port = PORT
htt
s3とローカルとの間でファイルの簡易同期
s3上のファイルを頻繁に扱う場合の作業方法について
・s3上のファイルをマウントして直接作業する
同一ディレクトリ上に一時ファイルなどが生成されるような場合に適さない(一時ファイルの更新が重い)・ローカルで作業して、定期的にAWS CLIのS3 syncで同期
単純に更新日時を元に同期するので、複数人で編集の競合が発生した場合に困る。バージョン管理みたいな多機能は望まないが、スクリプトでシンプルに同期&編集競合を検出したい。
ということでスクリプトを書く。
“`c#
# -*- coding: utf-8 -*-
import boto3, sys, time, os, datetime, json
import pprint# 前回同期時の「localファイル一覧」「s3上のファイル一覧」を覚えておく。
# s3上とローカル、「更新日時の新しい方」ではなく、「前回から変更があったか?」で判定させる。(更新日時の新旧は信用しない)
# 誤削除が怖いので、「片方にのみ存在するファイル」について、削除に関する処理は行わない(前回の存在有無に関わらず)。片方にのみ存
【Python】Tkinterで多言語翻訳アプリを作ってみた(Part 1)
# はじめに
以前から翻訳アプリを作りたくてウェブで調べていたら、googletransという便利なライブラリーがあったので作成してみました。
“`md
環境
・Python3.10 64bit
・Windows11
“`
# ライブラリーのインストール# 1.speech_recognitionのインストール
“`md
%pip install SpeechRecognition
“`
# 2.googletransのインストール“`md
%pip install googletrans
“`
googletransについては、インストールの過程で苦戦しました。
Youtubeでソリューションがのっていたので、以下の動画を参考にしました。# googletransの言語リスト
googletransの提供している言語リストは、こちらのURLを参考にしてください。
https://cloud.google.com/translate/docs/languages?hl
SeleniumでGoogleアカウントにログインした状態を保持する
# はじめに
GoogleではSeleniumを利用したアカウントへの自動ログインは拒否するよう設定されています。
そのため、SeleniumでGoogleアカウントを利用するようなコードを実行したい場合は、Googleアカウントにログインした状態のブラウザを使う必要があります。
実際に私はSeleniumでGoogleアカウントを利用する自動テストの開発案件で、Googleアカウントにログインした状態のブラウザを使うようにしました。
そこで本記事では、Python + Selenium + Chrome環境でGoogleアカウントにログインした状態のプロファイルを指定してコードを実行する方法を紹介します。# 事前準備
まずChromeを起動し、手動でGoogleにログインします。
次に、現在使用しているプロファイルを確認するため、URL欄に`chrome://version`と入れます。
「プロフィールパス」から使用中のプロファイルの場所と名前を確認することができます。![コメント 2022-07-05 080528.png](https://qiita-image-store.
超初心者がe869120さんの【分野別 初中級者が解くべき過去問精選 100 問】をpythonで解いてみた!Part3
https://qiita.com/K-suke99/items/d61684fabc881cf695ea
の続きです。
JOI 2011 予選 4 – 1 年生
https://atcoder.jp/contests/joi2011yo/tasks/joi2011yo_d
“`python:practice.py
N = int(input())
Alist = list(map(int, input().split()))
dp = [[0]*(21) for _ in range(N-1)]
dp[0][Alist[0]] = 1
Alist = Alist[1:]
for n in range(1,N-1):
for m in range(21):
if m-Alist[n-1] >= 0:
dp[n][m] += dp[n-1][m-Alist[n-1]]
if m+Alist[n-1] <= 20: dp[n][m] += dp[n-1][m+Alist[n-1
【JAVA→Python】JAVAで書いた特定の文字をカウントするコードをPythonに書き換えてもらう【新人教育】
# JAVA研修を終えた新卒の子にPythonを教える
入社後研修が終わった新卒の子にとりあえず会社としてはわんぱくにもDjangoの本を渡して学習してもらおうという感じだったので(私の入社時もそうだった)Python自体を学んでもらってDjangoに取り組んでもらおうと思い独断で新人教育の機会をいただきました。
私自身が学習で文章題を解いた時にJAVAでコードを作成したので、せっかくなら新卒の子にPythonに変換してみてもらおうと思いコードを渡してみました。# 目次
[1.実際に渡したコード(JAVA)](#1-実際に渡したコード(JAVA))
[2.そう、それはDjango](#2-そう、それはDjango)
[3.あれこれ話しがあとに返ってきた解答](#3-あれこれ話しがあとに返ってきた解答)
[4.おわりに](#4-おわりに)# 1.実際に渡したコード(JAVA)
“`java:JAVA
import java.util.*;public class Main {
public static void main(String[] args) {
dataclassesの使い方
公式サイトはこちら
[dataclasses – Data Classes – Python 3.10.5 documentation](https://docs.python.org/ja/3.10/library/dataclasses.html)# 使用するメリット
– ①可読性が高い
– ②型指定いないとエラーがでる
– ③特殊メソッドが定義される## ①可読性が高い
通常のコンストラクタを使うと
“`python
class InventoryItem:
“””Class for keeping track of an item in inventory.”””
def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
self.name = name
self.unit_price = unit_price
self.quantity_on_hand = quantity_on_handd