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

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

テキスト読み込み

def setting_number_reading(self):
self.setting_number=[]

with open(‘./setting.csv’, encoding=”shift-jis”) as f:
reader = csv.reader(f)
header = next(reader) # ヘッダーを読み飛ばしたい時

for row in reader: # 1行づつ取得できる
self.setting_number.append(row[1])

if self.setting_number[0] ==””:
self.setting_number[0] = “0”

if self.setting_number[1] ==””:

元記事を表示

Dijkstra Algorithm

#Abstract
Dijkstra Algorithm[^1] is an algorithm for finding the shortest paths between nodes in a graph. It is well-known among Japanese science undergraduate students, for it is always taught as mathematical optimization. However, it is taught just a method by hand, not programming. So I will program it in order to review it in Python.

#Order
Dijkstra Algorithm Order $O((|V|+|E|)\log |V|)$ (where $|V|$ is the number of nodes and $|E|$ is the number of edges).

#Aim
– input
– start pla

元記事を表示

[Python]平方根の誤差

# 概要

[ABC191 D – Circle Lattice Points](https://atcoder.jp/contests/abc191/tasks/abc191_d) で平方根を求める際に、浮動小数点数を返す `sqrt` は正方向に $1$ 以上の誤差を持つことがあり WA であった。
整数 $n$ に対して $a^2 \le n$ を満たす最大の整数 $a$ を得るには、`int(sqrt(n))` ではなく `isqrt` を使うと良い。

# 検証

手軽に計算可能な $1 \le n \le 10^7$ の範囲では `int(sqrt(n)) != isqrt(n)` である $n$ は見つからなかった。
調べたところ $2^{52}+2^{27} = 4,503,599,761,588,224$ が条件を満たす最小の数だそう。

>FWIW, assuming IEEE 754 semantics (with C’s double matching IEEE 754’s binary64), the smallest n for which int(math

元記事を表示

【Python】ABC191 D – Circle Lattice Points (誤差問題)【AtCoder】

[ABC191 D – Circle Lattice Points](https://atcoder.jp/contests/abc191/tasks/abc191_d)

ふりかえりをしていたが、
解説見て、解き方わかったのにどうしてもWAが消えない
10000倍して、整数でやってるつもりなのに、どうして!!!
ということでACの人たちのコードみたら、
10000倍してる人も**ルート計算で結局Decimal使ってるっぽい!**

#結論

**Decimal最強伝説!**
誤差問題はDecimalで提出しましょう。
※ちなみに、PyPyはDecimal計算遅いので、Pythonで提出しましょう。

#以下結論までの軌跡・・・
提出したコードたちはこちら

“`python:WA1.py
import math,sys
def LS(): return list(sys.stdin.readline().rstrip().split())
#############################
from decimal import Decimal
n = 10000
X,Y,

元記事を表示

Python3: JWT のペイロード部をデコード

こちらのプログラムを Python3 で書き換えました。
[Node.js: JWT のペイロード部をデコード](https://qiita.com/ekzemplaro/items/3e2c1e9cf9189a79b27c)

“`py:decode_jwt.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# decode_jwt.py
#
# Feb/07/2021
#
# ——————————————————————
import sys
import os
import json
import urllib
import requests
import base64
#
# ——————————————————————
def decodeJWT(str_token):
sys.stderr.write(“len(str_token) = %d\

元記事を表示

open(0)とすると標準入力に対応するファイルオブジェクトが取得できる

Python3で標準入力から入力を読む方法はいくつかありますが、組み込み関数の`open`を使って、`open(0)`とすると標準入力に対応するファイルオブジェクトを取得できます。

利用例としては以下のようになります。

“`python
stdin = open(0)
for line in stdin:
do_something(line)
“`

`open`の引数を`0`にすると、なぜ標準入力になるのでしょうか? [ドキュメントを注意深く読むと以下のように記述されています。](https://docs.python.org/ja/3/library/functions.html#open)

> file は path-like object で、開くファイルの (絶対または現在のワーキングディレクトリに対する相対) パス名を与えるものか、または、ラップするファイルの整数のファイルディスクリプタです。

`open`の引数としてはファイルパスだけでなく、ファイルディスクリプタを示す整数を指定することもできます。標準入力のファイルディスクリプタは0ですから、`ope

元記事を表示

Python3: Firebase Auth のトークンの作成

次の記事を参考にしました。
[PythonでFirebase Authenticationのトークン取得とFastAPIでトークン検証](https://qiita.com/DeliciousBar/items/d6845d329e37f21a6d4f)
参考ページ
[Relyingparty: verifyPassword](https://developers.google.com/identity/toolkit/web/reference/relyingparty/verifyPassword)

“`py:get_token.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# get_token.py
#
# Feb/06/2021
#
# —————————————————————-
import sys
import os
import requests
from dotenv import load_dotenv
# —–

元記事を表示

Flask(Jinja2)でzip()を利用する方法

Jinja2のテンプレート側でzip()が使えないものかと少し調べてみました。
結論、jinjaのフィルターとして指定すれば使えた。

#実装
app.pyなどpython側では

“`python
app = Flask(__name__)
app.jinja_env.filters[‘zip’] = zip
“`

とjinjaのフィルターとしてzipを追加する。
混乱しないようにフィルターの名称はzipとしてますが、被らなければOKなはず。

あとはテンプレートファイル側で

“`
{% for item1, item2 in iterable1|zip(iterable2, iterable3) %}
“`
としてあげればOK。
iterable1,2,3にはその名のとおりイテラブルなオブジェクトがきます(この辺はpythonでzip使う時と全く一緒)

自分はzip()が使いたくて調べましたが、拡張性高くて良いですね。

元記事を表示

【初心者向け】VSCode からPython boto3 でAWSリリースを触ろう

# はじめに
この記事は、社会人2年目 AWS、python初心者が勉強したことをまとめたものです。
間違っている点、改善点等ございましたご指摘いただけると大変ありがたいです。

# この記事について
新米エンジニアがVSCodeからboto3を使用してAWSリソースを触るまでの手順を自身の備忘録として残したものです。
自分と同じような初心者のためになれば幸いです。

# 準備
デバッグ実行に関連する各種の構成情報を記述するlaunch.jsonファイルに、
AWSアクセスに必要な情報を環境変数として埋め込んでおきます。

“`json:launch.json
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “Python: Current File”,
“type”: “python”,
“request”: “launch”,
“program”: “${file}”,

元記事を表示

PythonでBMPファイルを読み込む

# 対象
いわゆる256bmpが対象です。
外部ライブラリは使っていません。
python3.9で動作確認しましたが、多少下のバージョンでも動くかもしれません。
対象読者は、どちらかというと、256bmpのフォーマットを知っており、他の言語で256bmpの読み書きを実装したことがある人です。
すぐ使えること、行数が少ないこと、ある程度読みやすいことを優先しています。堅牢さや多機能さの優先度は下げています。

# 経緯
256bmpのフォーマットはシンプルで、多少の加工であれば、幅、高さ、パレット、画素の4つがあれば十分です。
ならば小物ツールを作るとき、install不要の標準ライブラリだけで楽に実装できそうです。

ということで参考情報を探すべく「python BMP 読み書き」等でぐぐったのですが、ドンピシャのものが見つからなかったため作りました。

なお、用途によっては画像系の外部ライブラリを使うことも多いでしょうし、あくまで参考になれば程度です。

# サンプルコード
“`python:bmpRead.py
#!/usr/bin/env python3.9
“””
BMP

元記事を表示

PythonでBMPファイルを出力する

# 対象
いわゆる256bmpが対象です。
外部ライブラリは使っていません。
python3.9で動作確認しましたが、多少下のバージョンでも動くかもしれません。
対象読者は、どちらかというと、256bmpのフォーマットを知っており、他の言語で256bmpの読み書きを実装したことがある人です。
すぐ使えること、行数が少ないこと、ある程度読みやすいことを優先しています。堅牢さや多機能さの優先度は下げています。

# 経緯
256bmpのフォーマットはシンプルで、出力に必要な最低限の情報は、幅、高さ、パレット、画素の4つだけです。
ならば小物ツールを作るとき、install不要の標準ライブラリだけで楽に実装できそうです。

ということで参考情報を探すべく「python BMP 出力」等でぐぐったのですが、ドンピシャのものが見つからなかったため作りました。

なお、用途によっては画像系の外部ライブラリを使うことも多いでしょうし、あくまで参考になれば程度です。

# サンプルコード
“`python:bmpWrite.py
#!/usr/bin/env python3.9
“””
bytea

元記事を表示

python3のインスタンスメソッド、クラスメソッド、スタティックメソッド

## 概要

### インスタンスメソッド
・記述方法
・試行
①インスタンスメソッドの呼び出し(初期化あり、初期化なし)
②インスタンスメソッドからインスタンス変数へのアクセス
③インスタンスメソッドからクラス変数へのアクセス
④インスタンスメソッドからクラスメソッドとスタティックメソッドにアクセス

###クラスメソッド
・記述方法
・試行
①クラスメソッドの呼び出し
②クラスメソッドからインスタンス変数へのアクセス
③クラスメソッドからクラス変数へのアクセス
④クラスメソッドからインスタンスメソッドとスタティックメソッドへのアクセス
⑤第一引数にクラスがある事による利点

###スタティックメソッド
・記述方法
・試行
⓪Boundオブジェクトを生成せずに、直接関数オブジェクトが実行されるので、クラスメソッドとインスタンスメソッドよりも、呼び出し速度が早く、メモリ消費も少ないらしい.
①スタティックメソッドの呼び出し
②スタティックメソッドからインスタンス変数へのアクセス
③スタティックメソッドからクラス変数へのアクセス
④スタティックメソッドからインスタンスメソッドとクラスメ

元記事を表示

【Python】受信したメールの添付ファイル名に日本語が含まれているときの対応

## 環境
python 3.7.5

## 省くこと
gmailのアプリパスワード取得の手順は省きます。

## メールサーバーにログイン
“`mail.py
import imaplib
import email

# 自身のメールアドレス
gmail_address = ‘hoge@gmail.com’
# googleアカウントで取得したアプリパスワード
gmail_app_password = ‘hogehogehogehoge’

gmail = imaplib.IMAP4_SSL(“imap.gmail.com”, ‘993’)
gmail.login(gmail_address, gmail_password)
# select()でボックスを選ぶのですがここでは選択しない
gmail.select()
“`

## メール一覧を取得
“`mail.py
# ALLの部分を変更することで検索をかけることができます
head, data = gmail.search(None, ‘ALL’)
for num in data[0].split():
resul

元記事を表示

【Python3】定期券計算を使って「○年○月○日は何カ月前!」ってのを書いてみた

# 1. 概要
Python3でいわゆる定期券計算とdatetimeを使って、何日前、とか何カ月前みたいなのを出してみた。

![20210205083839_a5b294ec43bb5777c5a19f65eb448791.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/39363502-0504-4eea-227e-0549e8147a8c.png)
という事が稀に良く起きるので。あ、手書きで漢字を書く時も稀に良くある。
耄碌したかな…。

# 2. 動作サンプル
[https://paiza.io/projects/_YmaBQlwVecdO9JDagJKvA](https://paiza.io/projects/_YmaBQlwVecdO9JDagJKvA)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/9ca83c25-3ed0-68ad-76ce-b88db70f7ab

元記事を表示

人間でもわかるPythonバイトコード(1) ~ バイトコード命令について ~

皆さんの中には、Pythonを実行したとき`__pycache__`というディレクトリができることを知っている方がいるかもしれません。
これはPythonスクリプトをバイトコードコンパイルしてできた.pycファイルをキャッシュしておくためのフォルダです。Pythonは直接的にはバイナリを読み取りながら実行しているのです。.pycファイルはVSCodeのhex editorで中を見てみるとこんな感じになっています。
![screenshot_pyc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263653/51a610b0-081b-bad1-93a5-fe62602ccfd8.png)
Decoded textで解読可能なアルファベット以外は意味不明ですが、これから解説していくので恐れることはないです。この記事(シリーズ)を見た後のあなたはPythonバイトコードを完全に理解し、スクリプトのデバッギングに活用すらしているかもしれません。

# 動作確認済み環境

OS: Windows 10, Ubu

元記事を表示

Djangoでお気に入り(フォロー)機能を実装しよう!!2/2

下記リンク先記事の続きとなります。
https://qiita.com/shinji256/private/398ff6207f9eddc15221

次にtemplateにお気に入りボタンを表示させ、さらにそれをtoggle関数によって登録and解除ができるようにコードを書いていきます。

##view.pyのクラスにcontextを設定
“`python
class Userbloglist(ListView):
model = Movieblog

def get_context_data(self):
context = super().get_context_data()
receive_user_id = self.request.GET.get(‘user’)
send_user = self.request.user
exist_fav_user = FavUser.objects.filter(user=send_user, user2__id=receive_user_id)

元記事を表示

フロントエンド、バックエンドがどういったものかpythonで考えてみた(ど素人目線)

フロントエンド?バックエンド?まったくわからなかった。
pythonの勉強進めていくうちに少し理解したのでpython目線の備忘録として残しておく。
よって文章の口調は、ですます調でなく、できるだけ端的に書く。

まずはこの図を使う。
![スクリーンショット (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689224/193df8b4-cb3f-1501-db97-67a760c7587d.png)
極端にすみ分けをすれば、
フロントエンド・・・ユーザーが実際に触るところ、見るところ(画面のデザインやクリックボタン等) HTML CSS JavaScript等
バックエンド・・・ユーザーがクリック(命令)した後のこと。サーバーサイドプログラミング言語がその命令を受け取りデータベースから命令されたもの(情報)を持ってきて返したり、自身で処理できる命令はそのまま処理したりする。ここではpython

pythonはバックエンドでありながら、フロント(HTML CSS JavaScript)としても

元記事を表示

Djangoでお気に入り(フォロー)機能を実装しよう!!1/2

ユーザーをお気に入り登録(またはフォロー)するためのプログラミング記事です。

#はじめに
お気に入り登録について、初学者の方でもできる限りわかりやすくまとめました。
自分の理解した内容を整理しつつ、初学者の方が実装および理解できることを目的とした記事になります。

長くなってしまったので、2部構成となっています。
続きは下記リンク先を参照ください。
https://qiita.com/shinji256/private/f4e529d6eb0201fd4777

※ユーザーモデルにお気に入りフィールドを追加するのではなく、新たなモデルを作成して実装する手法です。どうしてもお気に入りフィールドを作成して実装したい方はこちらの記事の対象外となります。

##お気に入り用クラス作成
appのmodels.pyにお気に入りリクエストを受信、送信するモデルを作成します。

app/models.py

“`python
class FavUser(models.Model):

user = models.ForeignKey(
User,

元記事を表示

TextAttack:NLPにおける敵対的攻撃に関するPythonフレームワーク

#はじめに
 本記事は日鉄ソリューションズ(NSSOL)様のインターンシップの一環として執筆したものです.

 自然言語処理の敵対的攻撃に関する論文 [TextAttack: A Framework for Adversarial Attacks, Data Augmentation, and Adversarial Training in NLP](https://arxiv.org/abs/2005.05909) で提案されたPythonフレームワーク([GitHub](https://github.com/QData/TextAttack),[公式ドキュメント](https://textattack.readthedocs.io/en/latest/index.html))の使用方法の解説,データ拡張とともに,実際に利用してみて得られた知見をまとめました.

#忙しい方へ

* 敵対的攻撃という攻撃によって機械学習モデルの精度が大きく影響を受ける場合があります.
* 本記事ではそれに関連したTextAttackと呼ばれるフレームワークの使い方を解説します.
* 攻撃を応用したデー

元記事を表示

docker-compose+Django+Postgresql+Pycharmで開発環境構築時に躓いた事とその対処

#この記事について
Webアプリの開発環境構築にあたり、docker-compose up 時とPycharmでrunする時に躓いたので、同じ悩みを抱えている人は、参考にしていただければと思います。

##環境
OS : Windows10 pro

##チュートリアルでのDockerfileとdocker-compose.yml等
####Dockerfile
“`dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
“`
####docker-compose.yml
“`
version: ‘3’

services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000

元記事を表示

OTHERカテゴリの最新記事