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

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

Python 3 エンジニア認定基礎試験 対策 (超初心者向け)

#1. Pythonエンジニア基礎認定試験について

2017年度から始まった民間資格です。

ExcelとかWordのMOS試験を実施している試験会場で受けられます。
例えば
オデッセイ テスティング センター
https://otc.odyssey-com.co.jp/index.html

試験内容などは下記になります。

試験名:Python3 エンジニア認定基礎試験
(英名:Python 3 Certified Engineer Basic Examination)
資格名:Python3 エンジニア認定基礎試験合格者
(英名:Python 3 Basic Grammar Certification)
概要:文法基礎を問う試験
問題数:40問(すべて選択問題)
試験時間:60分
合格ライン:正答率70%
出題範囲:主教材であるオライリー・ジャパン「Pythonチュートリアル(2021年9月1日より第四版に対応します)」の掲載内容を出題範囲として、以下の比率で出題いたします。また、一般的な知識からも出題されます。
※詳細の比率は下記HPをご確認ください。
参考 : http

元記事を表示

代入式を使って CRC32 を一つの lambda 式にする (Python 3.8 以降)

Python 3.8 から代入式 `”:=”` が使えるようなので、CRC32 を一つの lambda 式にしてみます。

“`python:Python3.8
crc32 = lambda data, P=0xedb88320, v=0xffffffff: 0xffffffff ^ [v := ((v ^ (0 if b else d)) >> 1) ^ (((v ^ (0 if b else d)) & 1) and P) for d in data for b in range(8)][-1]
“`

この式は、入力ビット数(入力バイト数の 8 倍)の配列を一度作っています。

zlib の crc32 と一致するか確認します。

“`python:test.py
#!/usr/bin/env python3.8

import zlib

crc32 = lambda data, P=0xedb88320, v=0xffffffff: 0xffffffff ^ [v := ((v ^ (0 if b else d)) >> 1) ^ (((v ^ (0 if b else

元記事を表示

JavaユーザーがPythonを使って印象的だった点

# はじめに
最近Pythonを用いてLambdaを開発する機会がありました。今までJavaを中心に開発してきた自分にとっては新鮮な経験で、Javaと違ってPythonだとこのように書く・書けるのかと感じたところがありました。

今回はJavaを中心に使用している開発者目線でPythonに触れて印象的だった点を書いてみようと思います。

ちなみにPythonのバージョンは3.8です。

## クラスとメソッド、アクセス制限
オブジェクト指向に慣れるとクラスにデータとメソッドをカプセル化したくなります。

例えばJavaの場合だと

“`Java:PersonName.java

public class PersonName {
private String firstName;
private String lastName;

public PersonName(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

元記事を表示

AWS利用して栃木県コロナデータのレポート出力を自動化する構成を考えてみた

## はじめに
栃木県のコロナのデータは以下サイトにデータの公開と可視化がされています.
しかし, データはいつ公開されているかはわからず比較的全体的な
データの可視化しかされていません.
そこで, コロナの感染状況のデータを自動的に取得してレポートとして公開する方法を考えましたので
ご覧いただけると幸いです.
※あくまでも, レポートとして公開することを目的としているので内容等の考察は行いません.

また, 今回は栃木県のコロナデータをもとにノートブックアウトプット資料の自動化を行っていますが,
他の形式データでも応用可能なので栃木県のコロナの状況には興味のない人にも適応できる内容かな
と思います.

※これはあくまでも個人で作成したものです.

## データセット
https://www.pref.tochigi.lg.jp/e04/welfare/hoken-eisei/kansen/hp/coronakensahasseijyoukyou.html

上記, URLのExcelデータを使用しています.

## 使用技術
開発環境

* macbook air (2020) in

元記事を表示

ipwhoisを使ってwhoisで得られる情報を得る

“`
ykishi@dezembro X-Forwarded-For % cat whois_test.py
#!/usr/bin/env python3

from ipwhois import IPWhois
import json
import sys

def get_info(ip):

obj = IPWhois(ip)
whoisInfo = obj.lookup_whois()

# print(type(whoisInfo))

name = whoisInfo[“nets”][0][“name”]
country = whoisInfo[“nets”][0][“country”]

return name, country

if __name__ == “__main__”:

result = get_info(“51.103.36.90”)
print(type(result))
print(result)
print(“,”.join(result))
print(result[0])
print(re

元記事を表示

concurrent.futuresによる非同期並行処理

# 単純な数値演算を、シーケンシャルに実行した場合と、別途非同期で並行して実行した場合の差異の確認

“`
ykishi@dezembro concurrent.futures-test % cat test2.py
#!/usr/bin/env python3

import concurrent.futures
import urllib.request
import datetime

TOKENS = [“a”, “b”, “c”, “d”, “e”]

def calc(token):
# ————————————-
# Execute some simple calculation
# ————————————-

total = 0
for i in range(100):
print(token, i)
total += i

return token, total

if __name__ == “__main__”:

元記事を表示

Pythonでオリジナルのドット絵エディタを作る(4) – ベクター出力機能の追加

#はじめに
[前回の記事](https://qiita.com/Hisan_twi/items/219eb88c535f9a6171bd)で作成したドット絵エディタに、描いたドット絵をベクター画像(SVG形式)で出力する機能を追加します。。
搭載する機能の仕様は以下の通りです。

– ドットの角ばった形状を保ったままの形で書き出す。
– 色別に複合パスとして書き出す。
– 同じ色が隣接したドットは連結した形状として扱う。
– 白のドットは透明色として扱う(パスとして書き出さない)。

事前にこの機能を実装するためのアルゴリズムを調べたところ、[DEFGHI1977さんのサイト](http://defghi1977.html.xdomain.jp/tech/dotrace/dotrace.htm)で公開されている『ドット絵SVG化スクリプト:dotrace.js』に行き着きました。node.jsのコードとアルゴリズムが公開されているので参考にしようと思いましたが、Javascriptに不慣れなこともありうまくPythonで記述することができませんでした。
そのため、SVG形式への変換は独

元記事を表示

AWS SecretsManager motoを使用してpytest する方法

#secretsmanager motoを使用してのpytest

pytestをする必要があったので検索しましたがあまり日本語がなさそうな雰囲気。。。
別にmoto使用しなくても全てmockにしてしまってもいいけどね。
なんとなく知的好奇心が沸いたので試してみました。
なので記事にしてみました。

##必要モジュール
boto3
moto
pytest

##実装箇所

“`secrets_manager.py
import json
import boto3
import logging

# log_level
logging.getLogger().setLevel(logging.INFO)

class SecretsManagerClass:

def __init__(self, secret_name):
logging.info(secret_name)
self.secret_name = secret_name

def _open_boto_session(self):
return b

元記事を表示

MQTT を file に変換するプログラム

次のシステムを構築する常駐プログラムです。
[Grove IoT スターターキット for SORACOM で作るリモートカメラシステム](https://qiita.com/ekzemplaro/items/541b82908cec46f6aa7b)

“`py:mqtt_to_file.py
#! /usr/bin/python3
#
# mqtt_to_file.py
#
# Aug/22/2021
# ——————————————————————
import paho.mqtt.client as mqtt
import json

MQTT_HOST = “www2.ekzemplaro.org”
MQTT_TOPIC = “sample/imageTopic”
MQTT_PORT = 1883
MQTT_KEEP_ALIVE = 60
#
# ——————————————————————

元記事を表示

HTTP POST を file に変換する API

次のシステムを構築するAPI です。
[Grove IoT スターターキット for SORACOM で作るリモートカメラシステム](https://qiita.com/ekzemplaro/items/541b82908cec46f6aa7b)

“`py:http_to_file.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# http_to_file.py
#
# Aug/22/2021
#
# ———————————————————————
import os
import sys
import json
import cgi
import fcntl
#
# ———————————————————————
def file_write_proc(file_name,str_out):
fp_out = open(file_n

元記事を表示

リストの要素を横並びで出力する

# “”.join()の使い方
“要素の間に入れる文字”.join(リスト)
**※リストの要素がint型だと使えない**

“`.py
l = [“a”, “b”, “c”, “d”]
print(“,”.join(l))
# a,b,c,d
print(“”.join(l))
# abcd
print(” “.join(l))
# a b c d
“`

## リストの要素がint型の場合
str型に変換してから””.join()を使う

“`.py
l = [1, 2, 3, 4]
l = [str(x) for x in l]
print(” “.join(l))
# 1 2 3 4
“`

元記事を表示

Pythonのリスト内包表記による2次元配列の転置

# リストの転置
~~調べても出てこなかったので。~~
たくさん出てきます。きちんと調べましょう(ごめんなさい)。
2次元配列aを転置したものを変数bに代入することを考えます。
b[x][y]にはa[y][x]の要素が入っています。
配列aの縦と横の大きさは同じでなくてもよいものとします。

# for構文を使ったやり方
こちらが一般的なやり方でしょうか。

“`python
# 転置する配列
a = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]

# 配列aの縦と横の大きさ
height = len(a)
width = len(a[0])

# 配列bを、各要素を0で初期化して定義
b = [[0] * height for _ in range(width)]

# aを転置したものをbに代入
for i in range(height):
for j in range(width):
b[j][i] = a[i][j]

# 結果確認
print(b) # [[1, 5,

元記事を表示

AtCoder参加記録No.3ーABC215

#ABC215
今回参加したABC215についての参加記録

2021年8月21日(土)のAtCoder Beginner Contest 215でした。

https://atcoder.jp/contests/abc215

##結果

A,B問題を正解
レート:28→42 (+14) Highest!
順位:6766/ 8537
時間: A問題25:54 B問題32:05
パフォーマンス:137

##詳細

###A問題
[問題](https://atcoder.jp/contests/abc215/tasks/abc215_a)

提出コード(AC)

“`python:A問題.py
N = input()
if N ==’Hello,World!’:
print(‘AC’)
else:
print(‘WA’)
“`

[提出コード詳細](https://atcoder.jp/contests/abc215/submissions/25218492)

###B問題

[問題](https://atcoder.jp/contests/abc215/tas

元記事を表示

停止しないbotの作り方

# 概要
botと言っても色々ありますが、今回は株式・仮想通貨の自動売買やギャンブルの自動投票などのbotを作っている人向けの話です。

やったことある人は分かると思いますが、こういったプログラムは、通信状況の悪化だったりページの遷移の遅延など、色々な理由でよく止まっちゃいます。
(公開APIを用いたものではなく、seleniumなどのスクレイピングツールを使用する場合は特に)

これが理由で損失が出ると悲しいので、なるだけ停止しないように対策をする必要があります。
ということで今回はpythonを用いて、停止しないbotを実装したいと思います。

# 方針と実装
方針としてはシンプルに、**一定時間ごとにbotが正常に動いているかどうかを監視する**というものです。
実装方法も簡単で、**botの起動プログラムを実行しているprocessのステータスを定期的に取得し、停止していれば再起動をかけるようにする**、という流れです。

ということで、早速スクリプトを書いてみます。`subprocess`というモジュールを使います。
前提として、botを起動するスクリプトはあるものとします(

元記事を表示

WSL2でpipが動かなかった時の対処法

# 問題
1. WSL2でpipをインストールしようと、`python3 get-pip.py`を走らせたが、反応がない
2. 代わりに`sudo apt install python3-pip`で無事インストールするも、`pip3 install xxx`も同じく反応がない
2. `pip3 install xxx –verbose`などをやっても、同じく何のアウトプットもない

# 解決方法
Windows ファイアウォールを**一時的**に無効化してみたら、通常通り動いたのでどうやらWSL2上でのPython3がブロックされているみたい。とりあえず、`\\wsl$\Ubuntu\usr\bin`からPython3.8を見つけ、Windows ファイアウォールで許可するも結果は変わらず。

結局、WSL2のDNS設定を変えなければいけないことが分かった。

## 手順
### 1. `/etc/resolv.conf`の自動生成を無効化する

`/etc/wsl.conf`をsudoで開き(ない場合は作成)、以下に書き換える。

“`
[network]
generateRes

元記事を表示

Yen to Int in python3

* source

“`python
def _yenToInt(src):
print(“src:”,src)
ret = 0
ss = src.split(“千”)
if len(ss) > 1:
ret = ret + int(ss[0])*1000
src = ss[1]
ss = src.split(“百”)
if len(ss) > 1:
ret = ret + int(ss[0])*100
src = ss[1]
ss = src.split(“十”)
if len(ss) > 1:
ret = ret + int(ss[0])*10
src = ss[1]
if src != “”:
ret = ret + int(src)
return ret

def yenToInt(money):
print(“money:”,money)
money = money.r

元記事を表示

MediaPipeでちょっと困った話

# ことの発端
後輩から、「こんなエラーが出て詰みましたァ!」と元気よく泣きつかれたので調査した。

“`
AttributeError: module ‘mediapipe.python.solutions’ has no attribute ‘drawing_styles’
“`

# 使用した環境
| |バージョン|
|—————|———|
|Python | 3.6|
|MediaPipe | 0.8.3|
あとPyCharm。

# 原因
MediaPipeをインストールするときに、“`pip install mediapipe“`としたこと。

## なんで?
なんか知らんが、件の“`drawing_styles.py“`が存在しない。pip installでのパッケージには含まれてないらしい。
[大本のgithub](https://github.com/google/mediapipe/tree/master/mediapipe/python/solutio

元記事を表示

無限ループや IndexError: list index out of range になる

**変数の値を変えて同じ動作を複数回行うなら関数を定義!**
## 期待した動作と計画
for で「リストX(固定)とリストY(可変)の[0]を比較し、一致した場合はリストYの[0]を削除する。リストXが終わるか、リストYが空になれば終了する」という動作を作成。
カウンタと while で for の動作を2回行う。リストYは変化するので、 while の前でリスト1をリストYに代入し、 while の1回目のみリスト2をリストYに代入する。
## 発生した事象
何度も無限ループや IndexError: list index out of range に陥った
## 原因
while の中の for で while や if を複数書き、break/ continue の行先が想定外のところになっていることに気付けなかった。
リストXが終わるまでにリストYが空にならなかった場合、 while でリストXの2周目が始まってしまった。
「同じ動作を複数回行うなら for/ while でループ」だと思い込んでいた。
## 対策
こまめに print して期待通りの動作か確認する。
変数を

元記事を表示

Python pptxで簡単な自動スライド作成アプリを作成してみた。

# python-pptx
皆さんはパワーポイントを自動で作成したいと思ったことはありませんか?
というより、作成したいと思ったからこのページへと飛んできているんですよね。
そこで便利なのが、「python-pptx」。
こいつを使えば、オブジェクト指向でどんなスライドでも作成することができます。

今回はその中でも私が個人的に使いたい要素として、
1. タイトルスライド
2. 画像貼り付け
3. テーブル貼り付け

の三種類を実装しようと思います。
とはいえ、備忘録のための駆け足実装ですので、説明不足感が否めないですがご容赦ください。

では行きましょう。

# python-pptxの導入
導入はおなじみ、pipで簡単にinstallできます。

“`bash
$pip install python-pptx
“`

#0. 共通設定
タイトルスライドを入れる前に、必要な設定は先にしてしまいましょう。

“`python:sample.py
from pptx import Presentation
from pptx.util import Cm, Pt

元記事を表示

Discord.pyで1からスーパーグローバルチャット導入

#グローバルチャットとは

グローバルチャットとは、Discordのチャンネルを跨いで会話出来るチャットの事です。
特定のチャンネルのメッセージをBOTが受信し、他のチャンネルへメッセージを転送することで、別のサーバーにいる相手とも、あたかも同じチャンネルで会話しているような感覚でチャットを行えます。
![スクリーンショット 2021-08-20 16.02.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224667/95c772f7-7091-70f9-0dbd-d8df7554c643.png)

#スーパーグローバルチャットとは

従来のグローバルチャットでは、BOTがメッセージを仲介して他のチャンネルへと送信する仕組みのため、同じ会話に参加したければ、同じBOTを導入する必要があります。
また、グローバルチャットを導入しているBOTが増えすぎたために、結局会話が分散してしまい、グローバルチャットをサーバーに導入しようと思っても、どのBOTを入れれば良いのか混乱してしまいます。
そこで、BO

元記事を表示

OTHERカテゴリの最新記事