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

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

医療情報技師の過去問サイトを爆速で作った話

# 背景

医療情報技師の資格試験が8月にあり、過去問の勉強しようと過去問サイトを探していたが、なかなか良いWebサイトがない。。。

以下のWebサイトを見つけたが、いくつか問題点があって、自作でWebサイトを作ることにしました。

https://iryoujyouhou.wiki.fc2.com/wiki/トップページ

# 問題点について

[背景](#背景)で述べた問題点についてですが、以下となります。

### 1. 問題の正解不正解を記録してくれない

自分が今何問正解しているのかを毎回紙にメモするのが面倒でした。
合格基準を満たしているか確認するために正答率も出したかったので、システム側で記録して欲しかった。。。

### 2. スマホ画面だと解答が丸見え

01.jpg

上記の画像のようにスマ

元記事を表示

LocalStack を使って dockerise した Lambda を実行する方法

# はじめに
AWS上で動かしているアプリをどうにかしてローカルで実行できないかと思って
色々試してみてどうにか Lambda を動かすことができたのでそのまとめ。

# LocalStack を使った構成

## 使っている技術など
* Docker
* Docker Compose
* LocalStack
* Python3

## ディレクトリ構成

“`
.
├── docker-compose.yml
├── app # ここにAPIのコードが入っている感じ。今回は説明対象外
└── docker
├── api
│ └── Dockerfile # 今回は説明対象外
├── lambda
│ └── Dockerfile # AWS で実行するやつ。今回は説明対象外
└── localstack
├── create_lambda.sh
├── dummy_function.py # 別にここにある必要はないけど、同じところにあった方が管理しやすいので
└── dummy_

元記事を表示

saveAsJSONL.js【JSON Lines】

“`javascript
function saveAsJSONL(data, name=new Date().toLocaleString(‘sv’).replace(‘ ‘,’T’).replaceAll(‘:’,’_’)+’.jsonl’) {
const a = document.createElement(‘a’)
a.download = name
a.href = URL.createObjectURL(new Blob([data.map(JSON.stringify).join(‘\n’)], {type: ‘application/jsonlines+json’}))
a.click()
}
“`
### JavaScriptのデータを保存する
Usage
“`javascript
saveAsJSONL([‘pen’, ‘pineapple’, ‘apple’, ‘pen’])

// ファイル名を指定
saveAsJSONL([‘pen’, ‘pineapple’, ‘apple’, ‘pen’], ‘hoge.jsonl’)
“`

!

元記事を表示

SQLAlchemy 2.0でよく使う文法まとめ

### はじめに

PythonのRDBのORMapperの代表的なものとしては、SQLAlchemyがメジャーかと思います。
今SQLAlchemyはメジャーバージョン2へのアップデートへの移行に伴い、バージョン1.4では新しい文法を使えるようになっています。

新しい文法での、一般的なクエリの書き方を備忘的に残します。

### コネクションの作成

“`python
from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL
engine = create_engine(URL(…接続設定))

print(next(engine.execute(‘select 1’)))

with engine.connect() as conn:
print(next(conn.execute(‘select 1’)))
“`

エンジンオブジェクト自体もクエリを実行できるし、コネクションオブジェクトもクエリを実行できる

### セッションの作成

“`python
from sq

元記事を表示

Lambdaの中からS3のPythonファイルをインポートする

# 背景・目的

AWSのLambdaをPythonで利用するとき、外部ライブラリをパッケージにまとめてデプロイするのが一般的かと思います。
その場合、パッケージのバージョンは固定されることになるのですが、あるとき、実行時にS3に配置したPythonファイルを実行時に読み込むというケースがあったので、その実現方法について備忘します。

# システム構成

“`plantuml
package AWS {
database S3
() Lambda
}

Lambda <-up- S3 : Pythonファイルを読み込み ``` # 例 ### S3にアップロードするファイル 下記の内容を`s3://some-bucket-name/uploaded_script.py`というパスにアップロードすると仮定します。インポートの挙動を確認するために、少し冗長ですが、標準ライブラリであるjsonをインポートしています。 ```python import json def hello(): print(json.dumps({"hello": "world"}

元記事を表示

PythonのType Hint(annotation)を自由自在に操る

PythonのType Hintを使ってますか?
最初は苦痛でしか無かったのですが、最近、意図通り使えるようになってきた。

## 誰が書いた?
1. 時間無くて、TypeHintを苦戦しながら使っている者です。
1. ドキュメント読めていません。間違いがあればご指摘頂ければ幸いです。

## Type Hint使う理由(利点)
1. 実行前にエラーがわかり、時間節約
2. 思い違いの論理エラーを早くに検出し、時間無駄にしない。
2. 改てコード見直した時、コード内容を思い起こしやすい。

## Type Hintという結論は良さそう
1. 型厳密性が高い言語の方がコンパイルした時の早いじゃないの?、と思ってますし、きっとそうでしょう。でも、Type Hintという形がPythonicな書き方の自由を実現しているのじゃないかと思う。以前より、型のstrict性を求めなくなりまして、TypeHint使ってます。
1. annotationのおかげで、Cythonの型指定も楽になりました。(Pure Pythonモードなので20-50%の向上しか無いそうですが。)

“`python
#

元記事を表示

pythonでリストの要素をカンマ区切りで出力したい

pythonでリストの要素をカンマ区切りで出力したい場合がある。
例えば普通に`print`すると以下のように出力されるところを、

“`
[‘player’, 7, 2, 1]
“`

以下のように出力したい場合

“`
player,7,2,1
“`

`print(*l, sep=’,’)`のようにすればOK

“`
print(l) # [‘player’, 7, 2, 1]
print(*l, sep=’,’) # player,7,2,1
“`

以上です

元記事を表示

総当たり戦の結果表から、各playerの勝ち負けを集計したい(pythonで)

以下のような総当たり戦の結果表から、各playerの勝ち負けを集計したい場合がある。
(W:Win, L:Lose, D:draw)

“`csv:test.csv
player1,-,L,L,W,L,L,L,W,L,W,W,
player2,W,-,W,W,L,L,L,W,L,L,W,
player3,W,L,-,W,L,L,W,L,L,W,W,
player4,L,L,L,-,W,W,L,L,L,L,W,
player5,W,W,W,L,-,D,L,L,L,W,W,
player6,W,W,W,L,D,-,L,L,W,L,W,
player7,W,W,L,W,W,W,-,L,L,L,W,
player8,L,L,W,W,W,W,W,-,D,W,W,
player9,W,W,W,W,W,L,W,D,-,W,W,
player10,L,W,L,W,L,W,W,L,L,-,W,
player11,L,L,L,L,L,L,L,L,L,L,-,
“`

以下のような出力が期待値

“`
Player,W,L,D
player9,8,1,1
player8,7,2,1
player7,6

元記事を表示

seleniumを利用してGoogle認証を通す方法

## やりたいこと
Googleアカウントで認証されるサイトにログインしたい。

■実行環境
 jupyter notebook(Chromeで実行)
■言語 
 python
■ライブラリ
 selenium

## ぶちあたった壁①
下記のコードでchromeが起動され、Googleのアカウント入力画面が表示されるところ
まではいいのですが、入力後「ログインできませんでした」メッセージが表示されます。
機械による操作と判断されたときのGoogle側の対処のようです。

“`python:
from selenium import webdriver
browser = webdriver.Chrome(r’C:\Users\[ユーザ名]\chromedriver.exe’)
browser.get([目的のURL])
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998522/3a5ca118-6f18-4080-a317-1e347b40edc4.png)

## ぶち

元記事を表示

初めてQiskitを使ってからQiskitで量子機械学習ができるようになるまで 〜パート2〜

# Qiskitであそぼ
某子供向け教育テレビ番組のパクリです。今回はQiskitを使って実際の量子コンピュータの代表的な問題である、「Deutsch-Jozsa(ドイチュ・ジョサ)のアルゴリズム」を取り扱ってみましょう。

[前回のおさらい](https://qiita.com/Hiroki_Akita/items/88028c3f400476473d62)

## まずは実行環境の準備
“`python
!pip install qiskit
!pip install qiskit[visualization]
“`

これでColabでQiskitを動かせますね。続いて諸々のインポートをしましょう。

“`python
import numpy as np
from numpy import pi
import math
import matplotlib.pyplot as plt
import qiskit
from qiskit import QuantumCircuit, execute, Aer, IBMQ, ClassicalRegister, QuantumR

元記事を表示

初めてQiskitを使ってからQiskitで量子機械学習ができるようになるまで 〜パート1〜

# Qiskitチュートリアル
こんにちばんわ、東京理科大学大学院で修士課程の院生をしています、秋田と言います(以後お見知りおきを)。
今回はQiskitについての解説をしていくので、ポップコーンでも食べながらゆっくりしていってください!
Qiskitとは、IBM社の量子コンピューティング用Pythonライブラリのことで、これを用いて量子コンピュータの(現在の)挙動を確認してみましょう。

## Qiskitの実行環境の準備
本記事ではGoogleのサービス”Colaboratory”、通称”Colab”で実行を行います。まずはColabでもQiskitが使えるように実行環境を整えましょう。

“`python
!pip install qiskit
!pip install qiskit[visualization]
“`

次に、IBM Quantumのアカウントにアクセスします。まだアカウントを作っていない方は是非この機会に!
![スクリーンショット 2022-05-03 16.41.40.png](https://qiita-image-store.s3.ap-northe

元記事を表示

B – Shiritori AtCoder

## 問題
https://atcoder.jp/contests/abc109/tasks/abc109_b

## 回答
“`Python

s = int(input())
w = [input() for _ in range(s)]

flag = True

if len(w) != len(set(w)):
flag = False

for i in range(1,s):
if w[i-1][-1] != w[i][0]:
flag = False

print(“Yes” if flag else “No”)

“`

## ポイント

“`w[i-1][-1] != w[i][0]:“`の部分で文字列内のアルファベットを抽出できる。
“`[-1]“`で一番後ろの配列を取得できる。
“`[-2]“`で後ろから2番目の配列を取得できる。

これが思いつかず。文字列のみの配列でも連想配列的に抽出できることを忘れていた。

元記事を表示

Djangoのmodelを用いたレコード挿入で起きたエラー

## 概要
今回はDjangoを学習している際に詰まったエラーの備忘録を記載したいと思います。

## 環境
Django: ‘4.0.4’
Python: ‘3.10.4’

## 前提
まず前提として下記状況を想定しています。
* nameとageのカラムを持ったPersonテーブルにデータを挿入したい

“`~/model_app/models.py
from django.db import models

class Person(models.Model):
name = models.CharField(max_length=10)
age = models.IntegerField()
“`

## エラー概要
テーブルにデータを挿入するために下記ファイルにて処理を記載し実行しました。
“`~/main.py
import os
from django import setup
from model_app.models import Person

# 環境変数をセット
os.environ.setdefault(‘DJANGO_SETTINGS_MOD

元記事を表示

【python】ezdxfを使ってみよう#2~図面描画編~

本章では実際に**図形を描画するコード**をまとめます。

[前章はこちら:#1~図面作成と設定編~](https://qiita.com/Rai-see/items/aebf4587f7a9b30e3ab1)

ezdxfで作図可能な図形は、以下で紹介されています。
[参考:ezdxfで扱えるエンティティ 公式ドキュメント](https://ezdxf.readthedocs.io/en/stable/dxfentities/index.html?highlight=entit#module-ezdxf.entities)
ここでは以下の基本的な図形を紹介していきます。
1. **Line 線**
1. **Text 文字**
1. **Point 点**
1. **Circle 円**
1. **Arc 弧**
1. **poliline ポリライン(連続線・多角形)**
1. **hatch ハッチング**

“`Python:共通条件
doc = ezdxf.new(‘R2010’, setup=True)
msp = doc.modelspace

元記事を表示

Qiitaの記事からコードブロック部分だけ抽出して表示するPythonスクリプト

Qiitaの記事に書かれたコードを動作確認することが多いので、Qiita記事のURLを指定してコードブロック部分だけを表示するスクリプトを作りました。

### 使用例

“`text:すべてのコードブロックを表示
$ python3 qiitacode.py https://qiita.com/shiracamus/items/556ff8d916712a9f7055
“`

“`text:c言語部分だけ表示
$ python3 qiitacode.py https://qiita.com/shiracamus/items/556ff8d916712a9f7055 c
“`

“`text:Python(py)部分だけ表示
$ python3 qiitacode.py https://qiita.com/shiracamus/items/556ff8d916712a9f7055 py
“`

### プログラムコード

“`py:qiitacode.py
#!/usr/bin/env python3

“””
download a Qiita article and p

元記事を表示

[python] バイト数指定でテキスト切り出し

以前、python2系で作成していたテキストファイルの一部を切り出して別ファイルにしていた処理が、python3系で切り取りに使っていた len がバイト数じゃなくて文字数カウントになってしまったので修正が必要になったメモです。

“`python
text = “012345あいう67890”
charcode = ‘cp932′ # 文字コード指定
byte_text = text.encode(charcode) # 文字列エンコード
clip_text = byte_text[6:12].decode(charcode, errors=’ignore’) # バイト単位で切り取った文字をでコードで戻す
“`

ちょっと面倒だけど、できました。
もっといい方法は無いのかしら。

元記事を表示

[AtCoder]Pythonにおける配列のコピー

追記(2022/5/2)
コメントにてpythonの配列の処理について、分かりやすく図にて説明いただきました。
具体的な内部の処理について知りたい方はぜひご覧ください。
# 目的
pythonを使用すると、配列を代入した際に値が書き換わってしまい困ってしまうケースがあると思います。
そこで、どのような場合に値が書き換わるのか、どのように対処できるのかをまとめました。
# 環境
AtCoderでの使用を前提としているため、AtCoderのコードテストで実行しています。
言語は実行速度を考慮しPypy3(7.3.0)としています。
# 一次元配列
## 代入される例
~~~python
A = [0,1,2]
B = A
B[0] = 3
print(A)
#[3, 1, 2]
~~~
上記の例では、BにAを代入するとBの要素を変更してもAの配列が書き換わります。
これはBへはAの配列のコピーでなく、Aの配列の参照を代入しているからと考えられます。
よって、AとBはともに同一の配列を参照しているため、配列の値を書き替えるとA、Bともに変化します。

## 代入されない例
~~~python

元記事を表示

NDLOCRのWebアプリを作ってみた【Gradio】

https://huggingface.co/spaces/tomofi/NDLOCR

NDLOCRを試せるWebアプリ作ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/e9bf7efd-a225-1ae7-b3f9-a2589fb9aefa.png)

“`python
import os
import torch

print(torch.__version__)
torch_ver, cuda_ver = torch.__version__.split(‘+’)
os.system(f’pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/{cuda_ver}/torch{torch_ver}/index.html –no-cache-dir’)
os.system(‘cd src/ndl_layout/mmdetection && python setu

元記事を表示

Githubに100MB以上のファイルをプッシュする方法

# はじめに
– GitHubでは100MB以上のファイルをプッシュすると拒否され、50MB以上のファイルをプッシュすると警告される仕組みとなっています。
– 今回はGitHubに100MB以上のファイルをプッシュする方法を考えてみたいと思います。

# Githubに100MB以上のファイルをプッシュする方法

– 100MB以上のファイルをそのままプッシュするとGithubに拒否されてしまうため、ファイルを分割してプッシュしようと思います。
– また、50 MBより大きいファイルを追加または更新しようとすると、Githubから警告が表示されるので、49MBでファイル分割しようと思います。
– 具体的には、ZIPファイルをbase64にエンコードして、49MBのテキストファイルに分割してプッシュします。
– 元のファイルに戻すときは、分割したテキストファイルのテキストを結合して、デコードすればZIPファイルに戻ります。

# 実装
Pythonで実装したコードが以下です。

### フォルダ構成
“`
ディレクトリ
├─main.py
├─setting.json
├─input

元記事を表示

Apache AirflowのDAG設定値についてまとめてみる

 前回Cloud Composerを利用して、BigQueryへのデータの取り込みについて記事を書きましたが、DAG実装の詳細(特に各パラメータの役割)については、記事が長くなりすぎるので割愛しました。なので今回から複数回に渡って、以下の内容を深堀りしていこうと思います。

– DAGの設定値について(今回分)
– テンプレート内で利用可能な変数について

## DAGとオペレータについて
 細々した話をする前に、まずはDAGとオペレータの概略からまとめてみました。
|構成要素|概要|
|—|—|
|オペレータ|処理を定義するための関数。クラウド操作毎に細かく用意されているため、自身がやりたい処理のオペレータの利用方法を調べる必要がある。前回BigQueryへのデータ取り込みで使用したオペレータは、「GoogleCloudStoragePrefixSensor」、「GoogleCloudStorageToBigQueryOperator」、「DummyOperator」です。|
|DAG|オペレータから定義された処理+処理同士の前後関係の情報をもった処理のグループのことです。|

元記事を表示

OTHERカテゴリの最新記事