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

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

Lambdaでメッセージを編集してSNS Publishする一例

# Lambdaのコード

 ヒアドキュメントと変数、`json.dumps`を利用した一例です。
 SecurityHubの通知を例にして作成しています。

“`py:lambda_function
from __future__ import print_function
import json
import boto3
import os

sns = boto3.client(“sns”)
def lambda_handler(event, context):
message = event[“detail”][“findings”][0]
msg = “””
Security Hubにより検知した違反内容
セキュリティ基準コントロール:{standards_control_arn}
タイトル:{title}
説明:{description}
セキュリティステータス:{status}
重要度:{severity}
修復手順:{remediation_text}({remedeation_url})

元記事を表示

Pythonでフィボナッチ数の計算

#はじめに
僕がやりたいのはPythonでフィボナッチ数の計算をすることです
#実行環境
僕の実行環境です
Ubuntu: 20.04.2 LTS(64-bit)
Thonny: 3.2.7
Python: 3.8.5(64-bit)
#フィボナッチ数とは
フィボナッチ数をWikipediaで見てみると[[1]](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0)、

>概要
>フィボナッチ数列(フィボナッチすうれつ、(英: Fibonacci sequence) ($F_n$) は、次の漸化式で定義される:

“`math

F_0 = 0,\\
F_1 = 1,\\
F_{n+2} = F_n + F_{n+1} (n ≥ 0)\\
“`

>第0~21項の値は次の通りである:
>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584

元記事を表示

Cron + Pythonの覚え書き

# cronの基本
## 編集方法と起動確認
“`sh
$ sudo systemctl status cron
● cron.service – Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-02-13 19:03:03 JST; 3min 32s ago
Docs: man:cron(8)
Main PID: 352260 (cron)
Tasks: 1 (limit: 9386)
Memory: 436.0K
CGroup: /system.slice/cron.service
└─352260 /usr/sbin/cron -f

$ crontab -e
“`
## 書式
`分 時 日 月

元記事を表示

Lambdaで異なるリージョンにSNS Publishするときはリージョンを指定する

# Lambdaで異なるリージョンにSNS Publishする

 LambdaではPython3.6を使用しています。
 バージニア北部リージョンから、東京リージョンのSNSにPublishします。
 バージニアのLambdaコードはこちら。

“`py:lambda_function
from __future__ import print_function
import boto3
import json
import os

def lambda_handler(event, context):
region = os.environ.get(“REGION”)
sns = boto3.client(“sns”, region_name=region)
print(region)
print(sns)
response = sns.publish(
TopicArn=os.environ.get(“SNS_ARN”),
Subject=”テスト”,
Message=”Lambdaで異なるリ

元記事を表示

asyncioの勉強(Producer/Consumer, その2)

#Producerも一人で重く、Consumerは重い処理をする場合

Producer側も重い場合は`asyncio.run`の隠蔽は無理かな。。。
次のような、Producer側にもI/O待ち等がある場合。

“`python
async def my_iterator(n):
for x in range(n):
# produce an item
print(‘producing {}/{}’.format(x, n))
# simulate i/o operation using sleep
await asyncio.sleep(random.random())
item = str(x)
# put the item in the queue
yield item
“`

次のように実行。非同期でもそうじゃないイテレータでも対応。

“`python
print(“=== Pattern A ===”)
asyncio.run(request_pc

元記事を表示

Level別 Pythonリスト内包表記 8選

リストの内包表記はとても便利な書き方ですが、他の言語からやってくる人にとって
少し理解しづらいものだと感じました。

なのでこれさえ押さえとけば、**簡単な**内包表記は書けちゃうよって物をまとめました。
# 環境
Python 3.7.8

## そもそもリストの内包表記とは
リストを生成する簡潔な手段です。【[公式:リストの内包表記](https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions)】

具体的にはこんな感じ。

“`python
sample = [1, 2, 3, 4]
new_sample = [ x * 2 for x in sample]
print(new_sample)

# [2, 4, 6, 8]
“`
## level 1 : 基本をおさえよう
リスト内包表記の基本はこれだ。

“`python:式
[ expression for item in iterable (if condition) ]
“`

実にシンプル。

– iterableオ

元記事を表示

asyncioの勉強(Producer/Consumer, その1)

# Producerが一人で軽く、Consumerは重い処理をする場合
Popen で外部プログラムの実行順序をスケジュールしようと思ったけど、
asyncio.create_subprocess_exec があるのを知ったので、
python の async/awaitの勉強してみた。

関数のリターン値が、コルーチン, Task, Futureどれかわからなくなったり、
run_until_complete, call_soon, ensure_future どう使い分けるのがわからなくなったり、
色々気持ち悪いけど、使うだけなら簡単かな。

## asyncio.run の隠蔽
`asyncio.run` を隠蔽してみたかったので、`asyncio_pool`を作ってみた。

###使い方
“`python
with asyncio_pool(3, print_async) as pool:
for x in range(n):
print(‘producing {}/{}’.format(x, n))
pool.put(x)
“`

元記事を表示

Pythonのクラスの中身は関数である

この記事は人間でもわかるPythonバイトコードシリーズ第2回目の記事ですが、この記事から見始めても大丈夫です。
前回の記事は[こちら](https://qiita.com/MtShiba/items/6734fe97f4c4fc658936)です。

前回の記事で、次は.pycファイルのフォーマットについて説明すると書きました。が、Pythonバイトコードの仕様について調べているうちにクラスと関数の__興味深い関係__を発見しましたので、予定を変更し、タイトルも独立したものとして記事を書くこととしました。

# 環境

CPython 3.9.0

# Pythonは関数をどう定義しているか?

まずPythonインタープリタ内での関数の扱われ方について見ていきましょう。
次のスクリプトのバイトコードを逆アセンブルします。逆アセンブルとはなんぞという人は[前回の記事](https://qiita.com/MtShiba/items/6734fe97f4c4fc658936)を参照してください。

“`python
def f(x, y):
return x + y
“`

元記事を表示

ユーザー情報を調べるコマンドを作る

ユーザーに関して調べるBotをつくってみよう
#環境
Ubuntu 20.10
Raspbery PI 4 RAM8GB
Python3.8.6 64bit
Visual Studio Code
#コードを書く
“`Python3
@bot.command()
async def userab(ctx, member : discord.Member):
usab = discord.Embed(title=f'{member}の詳細’, description=’詳細だよ’, color=discord.Color.orange())
usab.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
usab.set_thumbnail(url=member.avatar_url)
usab.add_field(name=’名前’, value=f’**{member.display_name}#{member.discriminator}**’)
usab.add_field

元記事を表示

Ubuntu16.04上でのpython3.7環境をdockerで構築する

# はじめに
ちょっと手こずったのでメモとして残しておきます。

#Docker file
以下のDocker fileで構築。

“`dockerfile:
FROM ubuntu:16.04
RUN apt-get update
RUN apt update
RUN apt install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt update
RUN apt install -y python3.7
RUN apt-get install -y python3-pip
RUN apt install git -y
RUN python3.7 -m pip install –upgrade pip
RUN python3.7 -m pip install numpy
“`

# 参考

元記事を表示

pillow で画像に図形を挿入

入力画像
![fujisan01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/989d527f-399e-b561-2e21-36819a9ae574.jpeg)

出力画像
![out01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/945c233b-98de-b943-5426-b77c135fae59.jpeg)

“`py:draw_img_rect.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# draw_img_rect.py
#
# Feb/12/2021
#
# ——————————————————————
import sys

import PIL.Image
import PIL.ImageDraw

# ——

元記事を表示

写真をEmbedで表示してみる

写真をEmbedで作るとなんだかいい感じなのでとりあえず作ってみた
#環境
言語: Python 3.8.6 64bit
入れてるやつ: discord discord.extのcommands
OS: Ubuntu Linux 20.10 Raspberry Pi4で動作
#作っていく
“`Python3
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix=’ts2:’)

@bot.event
async def on_ready():
print(“Bot is ready”)

@bot.command()
async def picture(ctx, url):
embed = discord.Embed(title=’写真’ color=discord.Color.blue())
embed.set_author(name=ctx.author, icon_url=ctx.author.mention)
embed.set_t

元記事を表示

scrapyとbeautifulsoup4を用いたクローリングアプリ作成#1

# 背景
クローリングアプリを作成したいと調べていたところ
scrapyを使うと楽だと聞いたのでscrapyとスクレイピングの勉強がてら実装していこうと思いました。

## やりたいこと
・複数のフリーランス案件から案件情報を取得
・取得したデータをcsv or DB に格納していく(ここは検討中)
・どの言語需要が高いかを調べるためにヒストグラム化する

## 本記事内容
1. scrapyをインストール
2. scrapyを用いてプロジェクト作成
3. spider作成
4. 実装(途中まで)

## 前提
今回は下記サイトを参考にscrapyをインストールしました。
https://qiita.com/Chanmoro/items/f4df85eb73b18d902739
### 動作環境
* Windows10 Home バージョン:20H2
* python 3.7.8

## 1.scrapyをインストール
まずはpipコマンドでscrapyをインストール

“`
py -m pip install scrapy
“`
インストールしたのちにバージョンを確認して結果が

元記事を表示

PEP 634, 635, 636 (Structural Pattern Matching) を読んだよメモ

今週の火曜日、PEP 634〜636 の 3本の PEP が Accept されました。

この 3本の

元記事を表示

Django Channelsを使ったチャットアプリで画像を送れるようにする

作業環境
> python 3.8.6
> Django 3.1.5
> channels 3.0.3

# はじめに
DjangoとChannelsを使ってチャットアプリを作っているのですが、テキストだけでなく画像もチャットで送れるようにしたいと思い、色々試して辿り着いた方法をここに記します。

Channelsの導入方法や設定などは記していません。

チャットアプリを作る際に参考にさせていただいたサイトはこの記事の最後にリンクを貼っています。

# 結論
画像をBase64形式(文字列)に変換すれば、テキストと同じように画像をやり取りできる。

# 作業
#### HTML

“`html:chat.html




“`

#### ★JavaScript(画像をBase64に変換)

“`js:chat

元記事を表示

matplotlobで数式と日本語を使えるようにする!

[matplotlib](https://matplotlib.org/)でタイトルやラベルに数式を挿入、日本語を表示する手法を一つずつ紹介する。

## 環境
* macOS BigSur 11.1
* Python 3.8.6
* matplotlib 3.3.3

# 数式
数式はLaTeXコマンドを用いて以下のように書くことで挿入できる。LaTeXコマンドがわからない方は[こちら](http://www.latex-cmd.com/)を参考にすると良い。

“`python
r’$LaTeXコマンド$’ #表示したい数式をLaTeXで書く。
“`
例えばx軸のラベルを$\Gamma(x)$にしたい場合は

“`python
plt.xlabel(r’$\Gamma(x)$’)
“`
のように書く。

# 日本語化
matplotlibで使用するフォントを変更し、日本語も表示可能にする。フォントは無料で使用できるIPAexゴシックに変更する。
### matplotlibのインストール先の確認
matplotlibのインストール先を確認するために以下のコマンドを叩く。

元記事を表示

3次元極座標系と一様乱数を用いると球面上に一様に乱数は生成できない

3次元極座標系を用いて球面上に一様な乱数を生成しようとする。

“`math
x=r\sin{\theta}\cos{\phi}\\
y=r\sin{\theta}\sin{\phi}\\
z=r\cos{\theta}\\
\\
(0\leq{\theta} \leq {\pi}, 0\leq{\phi} \leq 2{\pi})
“`
#実際のプログラム

今回はAnacondaのJupyter Notebookを用いてプログラムを実行した。

###全体

全体としては下記のように記述した。

“`
import numpy as np
import random
import math
import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111, projection=”3d”)

test=1000
r=1.0
for i in range(test):
a

元記事を表示

【忘備録】リスト内包表記について(Python)

#通常のリスト作成
“`python
num = (1, 2, 3, 4, 5)
list = []
for i in num:
list.append(i)

print(list)

“””
【結果】[1, 2, 3, 4, 5]
“””
“`

#リスト内包表記でのリスト作成
“`python
num = (1, 2, 3, 4, 5)
list = [i for i in num]

print(list)

“””
【結果】[1, 2, 3, 4, 5]
“””
“`

##条件を追加する
“`python
num = (1, 2, 3, 4, 5)
list = [i for i in num if i % 2 == 0] #2で割って余りが0のもの

print(list)

“””
【結果】[2, 4]
“””
“`

##for文を2つ連結して使用
“`python
num = (1, 2, 3, 4, 5)
num2 = (6, 7, 8, 9, 10)
list = [i * j for i in num for j in num2]

p

元記事を表示

[デイリーコーディング] 文字列内の各アルファベットを10個後のものに変換する

#今日の問題: 文字列内の各アルファベットを10個後のものに変換せよ

ord()とchr()を使って解決していきます。

“`python:回答(Python3)
from icecream import ic # デバッグ用にicecreamをインポートしています。

def move_ten(st):
result = “”
for i in st:
ordI = ord(i)
if ordI >= 113:
result += chr(ordI – 16)
else:
result += chr(ordI + 10)
return result

ic(move_ten(“testcase”)) # “docdmkco”
ic(move_ten(“codewars”)) # “mynogkbc”
ic(move_ten(“exampletesthere”)) # “ohkwzvodocdrobo”
ic(move_ten(“returnofthespacec

元記事を表示

googletrans , YouTube subtitle , Google Colab

[English](https://qiita.com/dauuricus/items/7c2d7a6a73b3755c5c6c)

以前、話していることを聞き書きしたいときにYouTubeにアップロードして、一時間ほど待って、キャプションが自動でできてから、そのキャプションファイルを .str / .sbv などでダウンロードして、さらに[Subtitleedit](https://nikse.dk/About)や[Aegisub](https://github.com/Aegisub/Aegisub)など優れた機能の字幕編集エディターを使って、間違いを修正して、編集終わればテキストファイルにして書き出していました。

[IBMワトソンTTSのdemo](https://speech-to-text-demo.ng.bluemix.net/)(日本語ドメインのは見たことないです。HPリンクのメンテ一切してないようなので。)や、京都大学の河原研究室の字幕生成の実験公開サーバーなども使わせていただいて、結果を比較したりし

元記事を表示

OTHERカテゴリの最新記事