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

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

UnicodeDecodeErrorを回避する方法

【muiの記録】
現在、Djangoを使用してWebアプリケーションを作成しております。
データの処理でUnicodeDecodeErrorが出た際、回避方法を考えましたので共有します。

1、デコード時のユニコード判定してエラーを回避。
2、エンコード時に元のユニコードを指定。

###forms.py
“`python

from django import forms

class UploadForm(forms.Form):
#フォームから選択されたファイルを格納
testfile = forms.FileField()

“`
###views.py
“`python

from django.shortcuts import render
from application.forms import UploadForm
import pandas as pd
import chardet

def url(reuest):
if request.method == ‘POST’:
upload = UploadForm(req

元記事を表示

早期リターンって,値を返す関数しか考えてない?

タイトル通り「早期リターンって,値を返す関数しか考えてない?」

初心者入門のプログラム FizzBuzz。回答例は以下のようなものですよね(Python)。

“`Python
def fizzbuzz(i):
if i % 3 == 0 and i % 5 == 0:
print(“FizzBuzz”)
elif i % 3 == 0:
print(“Fizz”)
elif i % 5 == 0:
print(“Buzz”)
else:
print(i)
“`

これを,「早期リターン」で書くと,とてもみっともないプログラムになります。
読みやすいですか? 保守性が高いですか? メリットは何?

“`Python
def fizzbuzz(i):
if i % 3 == 0 and i % 5 == 0:
print(“FizzBuzz”)
return

if i % 3 == 0:
print(“Fizz”)

元記事を表示

LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

[前回](https://qiita.com/uekichi3/items/bb9cb7d35653ee873982)は、AWSで公開されているgolangのLambdaコンテナイメージの事を書きましたが、
今回はこれを拡張してLineBotを作ってみました。

## 前提条件
[ngrok](https://ngrok.com/)に登録済みで且つ、インストール済み
[LINE Developers](https://developers.line.biz/ja/)に登録済みでチャネルも登録済み

## パッケージの構成
前回の構成で、コードを拡張しようと思ったのですが、
初回main.goをbuildしようとしたらgopkg.in/yaml.v3に関するエラーが出たので今回はPythonで試す事にしました。
“`
├── docker
│   └── lambda-python-test
│   └── Dockerfile
├── docker-compose.yml
├── lambda
│   ├── app.py
│   └── .env
└── requireme

元記事を表示

PyAudio+SpeechRecognitionからマイク入力を受け取りSofTalkで出力

# 環境
この記事では以下の環境を用いています。
・Python3.8.1
・SpeechRecognition 3.8.1
・PyAudio 0.2.11
・SofTalk Ver 1.93.45

# 概要
Pythonを用いてマイクから入力された音声データを他のソフトウェアに渡すことを考えます。
今回はPythonの音声認識ライブラリーの一つ、SpeechRecognitionを用いてマイク入力をテキストに変換します。変換後テキストは音声合成ソフトSofTalkに読み込ませ合成音声に変換します。

# 実装
 大まかに音声の認識、テキスト変換→変換テキストをSoftalkに渡し実行という流れで処理を行います。
“`python:MicrophoneToSoftalk.py
import speech_recognition as sr
import subprocess
import tempfile
import os
import subprocess

os.chdir(os.path.dirname(os.path.abspath(__f

元記事を表示

early return(早期リターン)についてまとめる 可読性の上がるコーディング

#### はじめに

**early returnとはコーディングにおけるテクニック。**

条件式を扱う際に早期にreturnを返すことでif文のネストを減らすというテクニック。

この記事でearly returnについてまとめていきます。

**2022/08/14 21時50分 追記**
**※あくまでコーディングにおけるテクニックの一例を示すものです。こういうものがあるよ、ぐらいの認識で読んで頂ければ幸いです。**

#### early returnでリファクタリング(修正前)

ここで一例を挙げてみる。

“`python:sample.py
class Student:

def __init__(self, student_id, name):
self.student_id = student_id
self.name = name

def student_check(self):

if self.student_id != “” or self.name != “”:

【AtCoder解説】PythonでABC264のA,B,C,D,E問題を制する!

**ABC264**の**A,B,C,D,E問題**を、**Python3**でなるべく丁寧に解説していきます。

ただ解けるだけの方法ではなく、次の3つのポイントを満たす解法を解説することを目指しています。

– シンプル:余計なことを考えずに済む
– 実装が楽:ミスやバグが減ってうれしい
– 時間がかからない:パフォが上がって、後の問題に残せる時間が増える

ご質問・ご指摘は**コメント**か**ツイッター**、**マシュマロ**、Discordサーバーまでお気軽にどうぞ!

**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
よかったら**LGTM**や**拡散**していただけると喜びます!

# 目次

[ABC264 まとめ](#abc264-まとめ)
[A問題『”atcoder”.substr()』](#a問題atcodersubstr)
[B問題『Nice Grid』](#b問題nice-grid)
[C問題『Matrix Reduci

【Python】input() で入力後の改行を防ぐ方法

思いついたのをメモ。
“`python
a = input(“a : “)
b = input(” / b : “)
“`
これを実行すると、通常だと
“`
a : 1
/ b : 2

“`
となるが、これを
“`
a : 1 / b : 2
“`
というようにしたい場合。
これでできる。
“`python
def input_mod(__prompt: object = …, end: str = “\n”) -> str:
result = input(str(__prompt) + “\0337″)
print(f”\0338\033[{len(result)}C”, end=end)
return result
“`
ただ、カーソルの位置を動かしているだけなので、スクロールが発生するほどの長文には使えない。

【メモ】「Python 実践データ分析100本ノック」のpulpエラーについて

`前提条件`
– macOS Monterey 12.4
– Anaconda 4.12.0
– Python 3.8.8
– jupyter-notebook 6.4.10

condaコマンドを用いてpulpライブラリーを追加すると第7章のノック61において以下のようなエラーが出た。

“`
Pulp: Error while trying to execute, use msg=True for more detailscbc
“`
詳細はわからないが、condaでpulpをインストールするとダメなようで`pipでインストールする`と解決した。
(※“condaとpipを混ぜると環境が壊れることもあるらしい“ので自己責任でお願いします。)
既にcondaでpulpをインストールしている場合は以下のコマンドを実行してからpipでインストールし直す。

“`
% pip uninstall pulp
“`
アンインストールが完了したら、以下のコマンドを実行する。
まだpulpをインストールをしていない場合も同様に以下のコマンドでインストールすればできる。
“`
% pi

Logging参考資料

# 背景
PythonのLog周りのライブラリ選定ついでにLoggingについて調べ、自分でまとめる必要性が無いくらいに情報が豊富だったので資料をプールしておきたいだけ

# 参考資料
Loggingの仕組みを分かりやすく書いてある
https://hackers-high.com/python/logging-overview/

Loggingを使う際のベストプラクティス的なコードがある
https://qiita.com/FukuharaYohei/items/92795107032c8c0bfd19

Loggingの注意点
https://qiita.com/amedama/items/b856b2f30c2f38665701

公式ドキュメント
https://docs.python.org/ja/3/howto/logging.html

複数ファイルにまたがる際の書き方
http://joemphilips.com/post/python_logging/

データクレンジングをしてみよう! 欠損値を削除する方法

## 1.データクレンジングとは
データクレンジングとは、破損したデータ、不正確なデータ、無関係のデータを特定して解決する手法を指します。 データ処理におけるこの重要な段階は、データスクラビングと呼ばれます。

## 2.データクレンジングの必要性
1番でも説明した通り、無関係のデータなどがあった場合、正しい予測結果を得られなくなることや、回帰分析においては、強い相関がみられる2変数のデータなどがある場合、※多重共線性などが発生してしまったりと、とても都合がよろしくありません。
分析業務においてもデータクレンジングはほどんどの業務を占めており、実際企業が保有しているデータは汚れているデータがほとんどなどでとても欠かせない作業になります。

### 3.実際にデータを見てみよう

“`Python
#必要なライブラリのインストール
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
%matplotlib inline
“`
“`

Djangoの環境構築手順

# 仮想環境作成
Webアプリ開発ではパッケージの依存関係で悩まされることがあるので、プロジェクト毎に仮想環境を構築する。 色々な仮想環境があるが、Pythonで用意されている仮想環境構築ツールを使ってみる。

また、Pythonを使ったプロジェクトでは、プロジェクトごとに必要なパッケージが異なる。
あらゆるパッケージをローカルにインストールすると、ごちゃつくので、プロジェクトごとに仮想環境を作って、そのプロジェクトに合致したパッケージのみをインストールして使う。
これによりプロジェクトごとに仮想環境が作成され、パッケージもその仮想環境ごとに管理できる。

# Djangoの管理者ユーザー作成
?管理者ユーザーを作成する。
`python manage.py createsuperuser`

# 仮想環境作成と有効化、停止
?このコマンドで今いるディレクトリ配下にmyenvディレクトリが作成される。
`python -m venv myenv`
?このコマンドで作った仮想環境を有効化できる
`source myenv/bin/activate`
?うまくいくとユーザー名の左に仮想環境

Python小技集 – #1 リスト/タプルから重複要素を削除する方法

こんにちは!beatbox4108です。
今日は**Pythonでリスト/タプルから重複要素を削除する方法**について説明していきます。
方法は2種類あります。
* setを使う方法
* dictを使う方法
* dict+zip (応用)

# setを使う場合
Pythonには重複しない値の集合である`set`があります。
ふつうはこれを使うのが良いでしょう。
“`python3
l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# setを使う場合
a=list(set(l))
print(“setを使う場合:”,a)
“`

“`
setを使う場合: [0, 1, 2, 3, 5, 6, 9]
“`

アンパックを使えばもっと簡潔に書けます。

“`python3
l=[1,1,2,3,3,3,5,6,6,9,0] # サンプル

# setを使う場合(別解)
b=[*{*l}]
print(“setを使う場合 (別解):”,b)
“`
“`
setを使う場合 (別解): [0, 1, 2, 3, 5, 6, 9]
“`

:::note

python 関数名 print

“`py
print(f”{self.__class__.__name__} {inspect.currentframe().f_code.co_name}”)
“`

こういうのすぐ出てこない時ある

1行でかけてもっと処理軽くて汎用的にコピペできて短くかけるやつあったら誰か教えてください。

shell2httpを作ってHTTP経由でお手軽にCLIツールを実行する

[shell2http](https://github.com/msoap/shell2http)をsnapで入れると動かず、[Flask-Shell2HTTP](https://github.com/eshaan7/Flask-Shell2HTTP)はファイルを直接弄らないといけないのでPythonで作ってみました。

https://github.com/GitHub30/shell2http

[![Python](https://img.shields.io/pypi/pyversions/shell2http.svg)](https://badge.fury.io/py/shell2http)[![PyPI](https://badge.fury.io/py/shell2http.svg)](https://badge.fury.io/py/shell2http)
# インストール

“`bash
pip install shell2http
“`

# 使い方

http://localhost:8080/ をブラウザで開くことでコマンドが実行されます。8080は変更可

matplotlibのsubplotsのcolorbarを共有する

## 動機

以下のようなcolorbarを共有したグラフを作成したいものとします.

![subplots-with-cbar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355593/2b6055e3-96cc-70e2-7053-f2d8b5752e0a.png)

## 結論
以下のようなコードを利用します.
contourfでcolorbarを生成して最終的にそれをfigに加える形で再現します.
注意点としては,colorbarのスケールが各々異なる場合であっても最終的に表示されるcolorbarはfor文の最後にplotされたものに準拠することです.

“`python
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams[“font.family”] = “Times New Roman”
plt.rcParams[“font.size”] = 14
plt.rcParams[‘mathtext.fonts

PIL.Image.Imageをdiscord.Fileに変換したい

こんにちはbeatbox4108です。
今回は少しPythonを書いていて躓いた点を覚書程度にまとめましたので見てみてください

# TL;DR

:::note
`io.BytesIO`を使おう。
:::
:::note warn
`seek(0)`するのを忘れずにしよう。
:::
# 本文
Pythonで、Discordのスラッシュコマンドに反応して画像を送るbotを作っていた時のこと…

**あれ?ファイルに出力しないと送信できなくね?**

この時の環境、クラウド上で容量が結構少なかったのでどうしてもファイルに出力するのは避けたかったんです。
でも**ファイルオブジェクト**かパスじゃないと送信できないし…

と、気づいたんです。そうか`BytesIO`介せばいいのか!
ということで書いたこちらのコード、ダメな点が一つありました。
“`python3
# im は PIL.Image.Image
fileio=BytesIO()
image.save(fileio,format=”png”)
await interaction.followup.send(file=d

PythonのSeleniumでWebを自動操作する

Chromeの操作を自動化したくてSelenium4を使ってみました。Selenium4を調べてみると結構機能が多かったので、私が使いそうなものだけ記載してあります。

# インストール

まずSeleniumで使用するChromeをインストールします。

“`bash:
apt install google-chrome-stable
“`

次にSelenium4をインストールします。

“`bash:
apt install python3-selenium
“`

# ライブラリのインポート

Seleniumのライブラリをインポートします。

“`python:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdri

Pythonをwsl2-Debianにインストールする

Python3(ver. 3.10.6)をwsl2版Debian(ver. 11.3)にインストールした際、遭遇したエラーと対処です。言うほどエラーですかね?
# 最も簡潔と思しき道筋
1. apt で依存関係のパッケージをインストール。パッケージはマニュアルにリストされている。
https://devguide.python.org/getting-started/setup-building/index.html#build-dependencies
2. パッケージをダウンロードして解凍し、“`./configure“`を実行した後、コンパイルしてインストールする。
“`
$ ./configure –enable-optimizations –with-lto –with-ensurepip
$ make -j 8
$ sudo make install
“`
“`make install“`だけ“`sudo“`するのにこだわりはない。インストール先がユーザーローカルではなく、root権限でないと書けない場所なので“`sudo“`で実行した。このような

Python-VLC の使い方

Ubuntu 22.04 でライブラリーのインストール

“`bash
sudo apt install python3-vlc
“`

“`py:replay_mp4.py
#! /usr/bin/python
#
import sys
import vlc
import time

sys.stderr.write(“*** start ***\n”)
file_mp4 = “./sample-5s.mp4”
media = vlc.MediaPlayer(file_mp4)

# start playing video
media.play()

loop_forever = True
while loop_forever:
try:
time.sleep(5)
except KeyboardInterrupt:
loop_forever = False
sys.stderr.write(“*** interrupted ***\n”)
#
sys.stderr.write(“*** end ***\n”)
“`

mp4 ファイルはこちらからサン

WindowsのPythonでデスクトップ通知(トースト)作ってみた【WinRT】

win10toastを使っているのですがWin32のため、WinRTで実装してみました。シングルファイルモジュールで作ってみました。

https://github.com/GitHub30/win11toast

[![Python](https://img.shields.io/pypi/pyversions/win11toast.svg)](https://badge.fury.io/py/win11toast)[![PyPI](https://badge.fury.io/py/win11toast.svg)](https://badge.fury.io/py/win11toast)
## インストール

“`bash
pip install win11toast
“`

## 使い方

“`python
from win11toast import toast

toast(‘Hello Python?’)
“`

![image](https://user-images.githubusercontent.com/12811398/183365362-dd163b1d