- 1. Flaskのsessionでmutableなオブジェクトを扱う
- 2. python exeファイル実行時の「Failed to execute script –ファイル名–」エラーについて
- 3. zipと*で2次元配列の行と列を変換
- 4. 法律文書における単語の共起
- 5. Python デバッグ用ViewをTkinterで作成(Windows用)
- 6. Python初心者のためのTips & Tricks
- 7. Djangoでゲームを作る
- 8. DataFrameの先頭に行を追加する方法
- 9. 頻出トークンの抽出
- 10. 【解決】math.floorで15桁以上の数の小数点を切り捨てると何だか変
- 11. メッセージやニックネームを彼ピッピ化するdiscordのbotを作る
- 12. Entity Linkingチュートリアル 発展編 知識ベース全体に対するBi-encoder探索の実装
- 13. Pythonを使った彼ピッピの作り方
- 14. CentOS6.7 への Python3 インストール手順メモ
- 15. DiscordボットでGCEインスタンスを起動・停止する
- 16. PythonでGoogleNewsを日本語かつjsonで取得する
- 17. Google workspace や Gmailのメールアドレスを使って、pythonから送信する。
- 18. PythonでNewsAPIの日本語記事を取得する方法
- 19. Macにgrpcをインストールする方法
- 20. UbuntuStudio Tips: (備忘録)mididingsのpython3対応
Flaskのsessionでmutableなオブジェクトを扱う
Flaskのsessionではmutableなオブジェクトの変更は検知されず、変更が反映されない。
例えば以下のコードがそれに該当する。“`python
from flask import Flask, sessionapp = Flask(__name__)
app.secret_key = b’a’@app.route(‘/’)
def index():
if not ‘mutable’ in session:
session[‘mutable’] = []
session[‘mutable’].append(1)
return str(session[‘mutable’])if __name__ == “__main__”:
app.run(‘localhost’, port=80, debug=True)
“``http://localhost/`にアクセスした時に期待する挙動は`[1]`、`[1,1]`、`[1,1,1]`のようにアクセスするたびに配列に1が追加されていくものだが、実際には1つ目以降の1は
python exeファイル実行時の「Failed to execute script –ファイル名–」エラーについて
##エラー内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998522/6c631c6a-7c95-64d5-9033-7610589228b0.png)
折角つくったプログラムをいよいよ実行しようとしたその時、こんなのが出るとガッカリしますよね。:weary:私もその一人でございます。
解決方法を色々とググってみましたが、ピンポイントで答えがみつからず、かなり苦労しました。そこで、ここでは特定の条件下での解決方法ですが、まとめました。:paintbrush:
##前提条件
■言語
python
■利用ライブラリ
seleniumJupyter Notebook上では動作していたものが、exeファイルにした時に動作しなくなるという状況でした。
##問題となったコーディング部分
下記の部分です。“`python:
from selenium import webdriver
browser = webdriver.Chrome()
“`
##解決方
zipと*で2次元配列の行と列を変換
leetcodeを解く時に、2次元配列の各列の値をlistにまとめたかったので、
調べてみました。## 実例
例えば2次元配列 two_dimentional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
が定義されている時、ゴールが[(1, 4, 7) (2, 5, 8) (3, 6, 9)]だとします。“`python
result = [i for i in zip(*two_dimentional_array)]
“`とすると結果は
“`python
print(result)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
“`
になりました。## *によるlistの展開とzipによる
*two_dimentional_arrayをピックアップしますと、*によって2次元配列が1次元配列に展開されます。“`python
print(*two_dimentional_array)
[1, 2, 3] [4, 5, 6] [7, 8, 9]
“`## zip関数によって、それぞれ展開され
法律文書における単語の共起
法律文書において共起される単語ペアを列挙する。
前記事までn-gramで頑張っていたけれど本記事ではおとなしくMeCab利用。# 参考
以下を参考にさせて頂いた。ただし、元記事ではグラフまでやっているが、本記事では頻出のペアを表示するまで。
[3. Pythonによる自然言語処理 2-1. 共起ネットワーク](https://qiita.com/y_itoh/items/7aa33ba0b1e30b3ea33d)# 異なる点
元記事から手を加えた点だけ記載する。## 利用しない単語
元記事では、名詞の共起をやっていた。本記事でもその点は同じ。名詞の中でも数(数詞)ではないものは削除した(あらかじめ削除したほうが良かったかも)点は異なる。法律の文書に〇〇条などの表現が邪魔になりそうな感じがした。“`python
noun_list = [[v.split()[2] for v in m.parse(line).splitlines() if (len(v.split())>=3 and v.split()[3][:2]==’名詞’ and v.split()[3][3
Python デバッグ用ViewをTkinterで作成(Windows用)
# 目的
デバッグ中に何らかの内部データを見るために、デバッガでbreakpointを設定して、逐次止めてみたり、流れていくログテキストを追うのは効率が悪いです。
MultiProcess環境ですと、breakpointで止めてしまうと正常な再開ができなかったりします。
それに、ユーザーからの入力も受け付けてほしいとき、ターミナルのキー入力を使って行うと、ログのテキストが流れて、訳が分からなくなります。# 作成物
Windows用でいたってシンプルです。機能
・インスタンス生成すると、自動的に別スレッドで動き出します。(mainloopで返ってこないということはありません。)
・インスタンス生成時にダイアログタイトルと初期メッセージを渡して表示できます。
・テキストの最終行でEnterを押すとその前の行を切り出して、Queueで返信してくれます。
→メッセージルールを作っておけば、受信したテキストに応じてアプリケーションの挙動を制御できますね。
例えば、#command が先頭にあったら何等かの動作をするなど。
・テキストを表示させる場合、Queueでテキストを送るか、text
Python初心者のためのTips & Tricks
新人のpython使いのためのTips & Tricksを書きます。要点は以下の6点です。
1. 標準ライブラリを使ってコードを簡素化
2. 無駄なfor/while文を排除
3. コードの実行とリソース要件のトラック
4. 2つのテーブルを結合する際の行数の増加を防ぐ
5. Stack Overflowでコーディングソリューションを見つける
6. コードのユニットテスト#1. 標準ライブラリを使ってコードを簡素化
標準ライブラリはガンガン使いましょう。単にコードが見やすく短くなるだけでなく、より効率的に動作するようになります。* 良くない例
“`python
import CSVrows = []
colnames = [‘a’, ‘b’, ‘c’]with open(‘filename.csv’, ‘rb’) as f:
reader = csv.reader(f)
for row in reader:
rows.append(rows)data = pd.DataFrame(rows, cols = colnames)
“`
Djangoでゲームを作る
#背景
学びのためにDjangoでゲームを作ってみることにする。
テトリスなど色々候補はあると思うがスロットゲームにすることにする。
#モヤモヤ
Djangoと言ったってRestもあるし・・・画面も面倒だし・・・
どうしたって業務・即戦力がきになる・・・オシャレなこともしたいし・・・
→ データアクセスがどっちも1つの山なんでデータベースから取ってきて
JSONで投入するという一旦完璧を目指す。
この時に、スクレイピングとかデータ解析などもやってしまう。
#考えないこと
DjangoRest
#ロードマップ 作り物系
・公式やってみる。
・toDoリスト作ってみる
・ゲーム作ってみる
→ 今ここ
・データベースから取ってきて管理画面だけのを作ってみる。
→JSONでデータ投入
#仕様
・スロットマシン
・初期表示 4 が3枚並んでいる。
・ボタンを押すとランダム検索が起こる。
・スロットの絵柄と得点 例
6 3個揃うと 10000点
7 3個揃うと 7000点
5 3個揃うと 300点
・結果を表示する。
・Python3 Djangoを使用
#やって見て
もちろんや
DataFrameの先頭に行を追加する方法
プログラミング初心者です。
内容に間違いがあるかもしれないのでご注意ください。—
DataFrameの先頭に行を追加するメソッドは無さそうだったので、
追加したい行のみのDataFrameを作成して`pandas.concat()`メソッドで合成する方法をとってみる。###### 追加される側のDataFrameの作成
“`py
import numpy as np
import pandas as pd# 3行2列のランダム数値が入った配列から作成
df = pd.DataFrame(np.random.rand(3,2), index=[‘A’, ‘B’, ‘C’], columns=[‘foo’, ‘bar’])
# foo bar
# A 0.299105 0.841390
# B 0.424596 0.316961
# C 0.055032 0.110246
“`
###### 追加したい行をDataFrameとして作成“`py
# 追加される側と同じ列数の1行配列を作成(ここでは1行2列)
a = np.
頻出トークンの抽出
# Counterクラスを用いた出現数のカウント
頻出のトークンを抽出するために、Counterクラスの勉強をしています。
“`python
import collections
import more_itertoolsf = open(‘minpo.txt’)
data1 = f.read()
f.close()# n-gramでのトークン化(前記事で記載)
l =[“”.join(lst) for lst in list(more_itertools.windowed(data1, n=6, step=1))]
# [(トークン, 出現数)]の形の、タプルのリストを取得
c = collections.Counter(l)
# タプルの2つ目(tap[1]、出現数)が100以上の1つ目(tap[0]、トークン)をリストにする
[tap[0] for tap in c.items() if tap[1] >= 100]
“`出力結果は以下です。何に使えるかわからない結果になりました。
個人的な目標は、裁判などで利用できる書面作成支援アプリであり、よく
【解決】math.floorで15桁以上の数の小数点を切り捨てると何だか変
先日のAtCorderのB問題、正しくコーディングできているはずなのに、何回やっても不正解でした・・・
[B – Round Down](https://atcoder.jp/contests/abc196/tasks/abc196_b)
###問題文
整数または小数
Xが与えられるので、小数点以下を切り捨てて整数で出力してください。###制約
0≤X≤10**100
Xは整数、または小数点以下が100桁以下の小数であり、先頭に余計な0は付かない###回答
“`
import math
X = math.floor(float(input()))
print(X)84939825309432908832902189.9092309409809091329
84939825309432916635287552
…………………^^^^^
“`
AC× 7
WA× 9math.floorで15桁以上の小数点以下を切り捨てると結果がずれてしまいました。
###解説を見てみる
>以下のように処理すればよいです。
* Xを文字列として受け
メッセージやニックネームを彼ピッピ化するdiscordのbotを作る
#はじめに
[こちらの記事](https://qiita.com/natotti7518/items/e7387ab53b19cef7534e)で作った彼ピッピ化のコードをdiscord.pyを用いてdiscordのbotにしていきます。#コード
“`python
import discord
from discord.ext import commands
from pykakasi import kakasikakasi = kakasi()
kakasi.setMode(‘J’, ‘H’)
conv = kakasi.getConverter()
txt = {}bot = commands.Bot(command_prefix=’&’,help_command=None)
def make_pippi(p):
pip = conv.do(p).replace(‘し’, ‘ぴっぴ’).replace(‘シ’,’ピッピ’).replace(‘シ’,’ピッピ’)
return pipdef in_shi(shi):
judge = (‘
Entity Linkingチュートリアル 発展編 知識ベース全体に対するBi-encoder探索の実装
# なんの記事?
[Entity Linking 後編](https://qiita.com/izuna385/items/367b7b365a2791ee4f8e) に続く発展編です。https://qiita.com/izuna385/items/367b7b365a2791ee4f8e
前回の実装までで、表層形を用いて候補を絞り込んだエンティティ・リンキングシステムを実装し、評価まで行いました。
本記事では、**表層形による候補絞り込みを行わない**エンティティリンキングモデルを実装します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357766/bc59ab0b-bdd3-1615-0f43-5c726ec93d27.png)
## 表層形を用いない候補探索の歴史
[エンティティ・リンキング 前編](https://qiita.com/izuna385/items/9d658620b9b96b0b4ec9) でも述べたように、エンティティ・リンキングではこれまで、
Pythonを使った彼ピッピの作り方
#はじめに
彼氏 = 彼ピッピならば
し = ぴっぴ
なのである
というわけで、”し”を”ぴっぴ”にする(以下、彼ピッピ化という)コードをPythonで書いていく
#コード
“`python
from pykakasi import kakasikakasi = kakasi() #オブジェクトをインスタンス化
kakasi.setMode(‘J’, ‘H’) #モード設定
conv = kakasi.getConverter()txt = input(‘>>>’)
print(conv.do(txt).replace(‘し’,’ぴっぴ’).replace(‘シ’,’ピッピ’).replace(‘シ’,’シ’)) #彼ピッピ化
“`たったこれだけで彼ピッピ化してくれます。
“`
>>>彼氏
かれぴっぴ
“`コピペして使いたい方は「pykakasi」を予めインストールしておいてください。
“`
pip install pykakasi
“`漢字をひらがなやカタカナ、ローマ字に変換してくれるライブラリです。
「pykakasi」の詳しい使い
CentOS6.7 への Python3 インストール手順メモ
#はじめに
諸事情により、古い環境 (CentOS6.7) で Python を動かす必要がありました。
Python2系は標準入っているけど、Pythonは 3系で書かれていたので Python3をインストールすることにしました。
色んな所でつまずいてしまったので、メモとして手順を残しておきます。#インストール手順
標準では 2系がインストールされています。“`
$ python -V
Python 2.6.6
“`こちらを参考に yum でインストールしてみようとしたところ・・・
https://qiita.com/f-akazawa/items/5ec741f8a5cca999d7b3
“`
# yum install -y https://centos6.iuscommunity.org/ius-release.rpmLoaded plugins: fastestmirror
Setting up Install Process
Cannot open: https://centos6.iuscommunity.org/ius-release.rp
DiscordボットでGCEインスタンスを起動・停止する
はじめに
—
GCEのインスタンスをDiscordBotで起動・停止させるための手順を書こうと思います。
この記事ではhttps://qiita.com/kkst/items/2942db4ba9a14a0e926f
の記事で作ったインスタンスを例に起動・停止できるようなコードを書いていきます
Discordbot用のVMインスタンスを作成
—
GCEの永続無料のプランで構成していきます(pythonのコードを実行し続けるだけのサーバーなのでたいしてスペックは必要ない)| 項目 | 無料枠 |
|:—————–|:——————
| インスタンス | f1-micro
| ストレージ | 一ヶ月あたり30GB(HDD)
| スナップショット | 一ヶ月あたり5GB
| データ転送(外向き) | 一ヶ月あたり1GBhttps://cloud.google.com/free?hl=ja 参照
なおosはcent
PythonでGoogleNewsを日本語かつjsonで取得する
Googleのニュースは、例えばビットコイン関連のニュースが取得したい場合、実は以下のようなURLで取得できる
https://news.google.com/rss/search?q=ビットコイン&hl=ja[参考]↓
[Google News Rss(API)](https://qiita.com/KMD/items/872d8f4eed5d6ebf5df1)ただ、これだと結果がxmlなのでちょっと扱いづらい…
検索すると以下のようなライブラリがあったので使用してみたhttps://pypi.org/project/GoogleNews/
ドキュメントの通り、以下のように書いて動かしてみたが、エラーが出る
“`python
from GoogleNews import GoogleNewsgooglenews = GoogleNews(lang=’ja’, encode=’utf-8′)
googlenews.get_news(‘ビットコイン’)
result = googlenews.results()
print(result[0])
“`
“`
‘a
Google workspace や Gmailのメールアドレスを使って、pythonから送信する。
# 本記事の対象者
– GCPでサービスを作り、メールを送信する仕組みを無料で作りたい人。(サービスのホスティングが無料ではなく、メール送信部分だけ)
# 目的
sendgridなどの外部のサービスを使わずに、pythonを使ってgmailを送信する。# 必要なもの
– Gmail または、Google workspaceのアカウント (Google workspaceは管理者権限が必要)
– pythonを動かす環境# メールの設定
### 送信者の設定[設定](https://myaccount.google.com/intro/security)から二段階認証を有効にする
![スクリーンショット 2021-03-25 11.24.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38197/d628628e-b797-bccd-0bed-8e1ae312e115.png)二段階認証有効後、アプリパスワードを作成する
![スクリーンショット 2021-03-25 11.
PythonでNewsAPIの日本語記事を取得する方法
NewsAPIで日本語記事を取得しようと思ったらうまくいかなかったのでメモ
https://github.com/mattlisiv/newsapi-python
上記のライブラリを使用する。
https://newsapi.org/docs/client-libraries/python
上のドキュメントを参考にすれば、
“`python
# /v2/top-headlines
top_headlines = newsapi.get_top_headlines(q=’ビットコイン’,
language=’ja’,
country=’jp’)
“`とかすれば取れそうだが、これだと取得できない。
https://newsapi.org/docs/endpoints/sources
どうやらlanguage項目に’ja’がないらしい。
というわけで、“`python
# /v2/top-head
Macにgrpcをインストールする方法
#解決方法
Mac(Big Sur)にfirebase-admminをインストールしようとしたらgrpcのpipでコケたので対応した。
以下の環境変数を設定するとうまくいった“`
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=true
“`どうやらCatalinaとBig Surだとうまくいかないらしい。
#参考
https://stackoverflow.com/questions/65807966/poetry-install-grpcio-fails-with-envcommanderror
https://bleepcoder.com/fr/grpc/737099678/grpc-does-not-compile-on-mac-os-catalina-10-15-6-big-sur-11
UbuntuStudio Tips: (備忘録)mididingsのpython3対応
# はじめに
ubuntu studioに普通にapt-getでmididings入れるとpython2.7で動いてしまうので
python3で動くようにしたときのメモ# ソースの取得
どうやらpython3-mididingsとかいうパッケージはなさそうなので、
ソースからビルドして/usr/local/binにつっこむことにしたまずはソースの取得
“`
$ git clone https://github.com/dsacre/mididings.git
“`
mididingsってフォルダがあるのでそこのフォルダで色々作業する※2021/03/25追記
なんか今アクティブなブランチは以下のものらしいpython3.7対応済みとのこと
https://github.com/marcan/mididings.git# ソースの修正
修正箇所は4ファイル
– setup.py
– scripts/livedings
– scripts/mididings
– scripts/sendmidi先頭行の`#!/usr/bin/env python` を `#!