- 1. 繰り返し画像の生成 ~Pillow vs OpenCV(というかnumpy)~
- 2. 【Python】CSVに行を足してよいかどうか(新しい値があるかどうか)判断する関数
- 3. Python3でCSVからJSONへ変換する
- 4. 【Python】CSVの最終行が指定データと一致するかどうか判断する関数
- 5. python お一人様一点限り機能
- 6. python3 配列に任意の数入れる(簡易版)
- 7. python3 文字列の重複を調べる方法
- 8. python3 指定範囲だけ大文字にする (+改行なしの出力)
- 9. python3 任意の文字を抽出する(記録)
- 10. python3 配列を数値に変換して計算する (記録)
- 11. python3 配列条件付き 抽出方法(簡易版)
- 12. python3 mapとlambdaとは?
- 13. python3 イテレータとジェネレータとは?
- 14. Python環境構築 (venv, Amazon Linux 2)
- 15. python 好きな文字で囲む(記録)
- 16. Pythonのdatetimeモジュールで日時を取得するサンプル
- 17. 言語処理100本ノック 2020をやってみる 第三章:正規表現 後編
- 18. python3 辞書型
- 19. matplotlibで多軸(2軸~4軸)グラフ作成
- 20. python3 sort 昇順・降順 (記録)
繰り返し画像の生成 ~Pillow vs OpenCV(というかnumpy)~
# 経緯
小さな画像を連続させて模様を作りたかったのですが、Python3でやろうとするとPillowを使うかOpenCV使うかで悩んだので、この際どっちの方が良いのか実験してみました。
自分用のメモです。# 環境
* Windowns10
* Python 3.7.9
* ライブラリ
* numpy : 1.20.2
* opencv-python : 4.5.1.48
* Pillow : 8.3.1# 連続画像の作り方
同じ画像を連続させた画像をPythonで作る場合、やり方はまぁまぁたくさんあります。今回はPillowで読み込んだ場合とOpenCVで読み込んだ場合を比較しました(自分がよく使うので)やり方は次の通り。各々元の画像を縦に3回、横に4回繰り返し、12枚の元画像が並んだ画像を生成します。
元画像のサイズは`128×128`です。* Pillow
* 背景画像(大きさを「元画像の大きさ×連続させたい縦横の数」で定義しておく)に、元画像を貼り付ける“`p
【Python】CSVに行を足してよいかどうか(新しい値があるかどうか)判断する関数
[先程書いたもの](https://qiita.com/shin1007/items/c9becabb493efff06a8a)とはTFが逆で戻るようになってます。
“`Python
def ok_to_add_data(csv_file:str, data:list) -> bool:
”’
Returns
——-
True when the data has new value.
False when the data has no new value like;
– last_line == data,
– data has missing values and other data is same as values of same index of last_line
”’
# CSV読み込み
with open(csv_file, ‘r’, encoding=’utf8′) as f:
rows = [row for row in csv.reader(f)]
Python3でCSVからJSONへ変換する
Python3を使用して、CSVファイルをJSONファイルに変換します。
## 実行方法
“`
$ python3 csv2json.py -i <入力CSVファイル> -o <出力JSONファイル> –delimiter ‘,’ –header-only 0
“`|オプション|値|
|:——–:|:—:|
|-i|入力CSVファイル|
|-o|出力JSONファイル|
|–delimiter|CSV区切り文字|
|–header-only|0: データも含めて出力したい, 1: ヘッダのみを出力したい|## コード
“`python:csv2json.py
import csv
import json
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(‘-i’, ‘–input’, help=’Input file name (CSV)’, required=True)
parser.add_argument(‘-o’, ‘–output’, help
【Python】CSVの最終行が指定データと一致するかどうか判断する関数
車輪の再発明している感じ、ありますね。
“`Python
def is_same_as_last_line(data, csv_file) -> bool:
with open(csv_file, ‘r’, encoding=’utf8′) as f:
rows = [row for row in csv.reader(f)]
try:
last_line = rows[-1]
# 空白行が最後にある可能性があるので、その対策
if last_line == []:
last_line = rows[-2]
if(last_line == data):
return True
return False
# 行が少なすぎたりするとエラーを返す
except IndexError:
return False
“`
python お一人様一点限り機能
##お一人様一点限りを判定する
重複があるか無いかで判断する。“`
n = int(input())person_list = []
for i in range(n):
person_list.append(input())if(person_list.count(person_list[i]) == 1):
print(“YES”)
else:
print(“NO”)
“`
入力例2
4
Jimmy
Bob
James
Jimmy出力例2
YES
YES
YES
NO
python3 配列に任意の数入れる(簡易版)
###配列に指定する数字文だけ入力を行い配列に入れる。
“`
n = int(input())b = [int(input())for i in range(n)]
b.sort()for j in range(n):
if b[j] % 2 != 0:
print(b[j])
“`“`
b = [int(input())for i in range(n)]
“`
この箇所が重要。
python3 文字列の重複を調べる方法
#①countを使用する場合
“`
print(“Good School”.count(“oo”))
>> 2
“`
####注意
countは数えた文字は再度数えない“`
print(“Goooood”.count(“oo”))
>> 2
“`#②全重複を考える場合
上記の内容を結果3としたいのような場合“`
pattern = input()
string = input()
result = 0for i in range(len(string) – len(pattern) + 1):
portion = string[i : i + len(pattern)]if portion == pattern:
result += 1print(result)
“`入力例1
AA
abdeeAAbAAAbfde出力例1
3###まとめ
上記のように重なるものをどのように扱うかで異なる結果になる。注意して導入しよう。
python3 指定範囲だけ大文字にする (+改行なしの出力)
####スペース区切りの2つの整数と、文字列が入力されます。2つの整数の範囲の部分文字列を、大文字にして出力してください。
“`
a,b = input().split()a = int(a)-1
b = int(b)st = input()
print(st[0:a], end=””)
print(st[a:b].upper(),end =””)
print(st[b:])
“`入力例
2 6
Welcome to the paiza! I`m studying ruby!出力例
WELCOMe to the paiza! I`m studying ruby!##ポイント end=”” 改行無しの出力
print毎に出力される文字列が改行される事は問題ないのですが、もし改行を入れたくない場合は、print関数にオプションの end = “” を設定します。先程と同じ文字列をprintに指定し、1行目のprintにオプション end = “” を設定しました。
“`
print(“1 2 3 4 5 “,end = “”)
print(“A
python3 任意の文字を抽出する(記録)
###スペース区切りの2つの整数と、文字列が入力されるので、2つの整数の範囲の部分文字列を出力してください。
“`
a,b = input().split()a = int(a)-1
b = int(b)st = input()
print(st[a:b])
“`入力例2
2 6
Welcome to the paiza! I`m studying ruby!出力例2
elcom
python3 配列を数値に変換して計算する (記録)
####2つの整数の組がn個与えられるので、各組の計算結果を足し合わせたものを出力してください。
各組の計算結果は次の値です。
・2つの整数の組を足し合わせたもの
・ただし、2つの整数が同じ値だった場合は、掛け合わせたもの“`
time = int(input())
result = 0for i in range(time):
std_in = input()
array = std_in.split()if array[0] == array[1]:
result += int(array[0]) * int(array[1])
else:
result += int(array[0]) + int(array[1])print(result)
“`
入力例1
5
2 1
3 6
4 2
4 4
4 70出力例1
108
python3 配列条件付き 抽出方法(簡易版)
#### 指定した配列(リスト)を定義し、それらの要素のうち5以上の数をすべて足し合わせた値を出力してください。
“`
l = [4, 0, 5, -1, 3, 10, 6, -8]
l_plus = [i for i in l if i >= 5]print(sum(l_plus))
“`
#### 改行区切りで整数がn個入力されるので、n個の整数のうち、5以上のものをすべて足し合わせた値を出力してください。
“`
n = int(input())a = [0]*n
for i in range(n):
a[i] = int(input())a_list = [i for i in a if i >= 5]
print(sum(a_list))
“`
python3 mapとlambdaとは?
# mapとlambda
mapとはイテレータの要素を加工するためのもの“`
def triple(n):
return n * 3print(list(map(triple,[1, 2, 3])))
a = [10, 20, 30]
“`
mapでリスト(イテレータ)を呼ぶとジェネレータになる。そのため結果をリストに変換する必要がある。“`
print(list(map(triple,a)))
“`
###lambdaは上記の計算(triple)関数を書かなくても一行で実行できるものをいう。“`
print(list(map(lambda n: n*3, a)))
“`
python3 イテレータとジェネレータとは?
###イテレータとは、
連続するデータを操作するオブジェクト(リスト・集合・タプル)“`
scores = [10, 20, 30, 40]
it = iter(scores)
print(next(it))
print(next(it))
print(next(it))
print(“hello”)
print(next(it))
“`
上と同じ意味“`
for score in scores:
print(score)
“`
##ジェネレータ
リストから変換するのではなくて 0 からイテレータを作ることもできます。0から連続するデータを操作するオブジェクト作ることをジェネレータという。
無限ループを while True:
次の要素を引っ張ってくる yield i * 2 という命令 ジェネレータの重要なポイント
yieldをnextと連動させて取ってくることができる。
イテレータを作るこうした関数をジェネレータと呼ぶ“`
def get_infinite():
i = 0
while True:
yield i * 2
i +=
Python環境構築 (venv, Amazon Linux 2)
# ■ 参考
https://docs.python.org/ja/3/tutorial/venv.htmlhttps://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/
# ■ Python3.8のインストール
普通にyumインストールすると3.6がインストールされてしまうため、 `amazon-linux-extras` を利用してインストールします。
`amazon-linux-extras` はAmazon Linux用のリポジトリで、より新しいバージョンのライブラリを利用することができます。“`bash
# amazon-linux-extrasパッケージがインストールされていない場合はyumでインストール
sudo yum install -y amazon-linux-extras# python3.8をインストール
sudo amazon-linux-extras install -y python3.8
“`# ■ ve
python 好きな文字で囲む(記録)
### 文字列を枠で囲む装飾をするプログラム
#### 例
“`
=======
=======
“`
↑のようになるプログラム“`
input_text = input()
str_len = len(input_text)
print(“=”*(str_len +2))
print(“<"+input_text+">“)
print(“=”*(str_len +2))# 結果
# =======
#
# =======
“`
Pythonのdatetimeモジュールで日時を取得するサンプル
# Pythonのdatetimeモジュールで日時を取得するサンプル
## はじめに
コードを書いていて日時を使用する場面が出てくるかと思います。
そのときに私がほしいと思う、フォーマットと表示のサンプルを書きました。
解説はしていなくて、フォーマットと表示の羅列のみです。## 環境
– windows 10
– Python 3.9.1
– datetime## コード
“`python
import datetimeNOW = datetime.datetime.now()
print(NOW)
print(type(NOW))
# 2021-09-06 18:19:37.079126
#print(NOW.year)
print(type(NOW).year)
# 2021
#print(NOW.month)
print(type(NOW.month))
# 9
#pri
言語処理100本ノック 2020をやってみる 第三章:正規表現 後編
#目的
下記のウェブサイトの言語処理100本ノックを行う.https://nlp100.github.io/ja/
第一章
https://qiita.com/t-baba-11/items/f230136058a695c7c7d1
第三章 前編
https://qiita.com/t-baba-11/items/1e7b69545a2805a88527
#第3章:正規表現
プログラミング言語はPythonを用いる.
jupyter notebookを使用しているので,出力にprint文が必要な場合は適宜追加する.###25. テンプレートの抽出
テンプレートは,タイトル名称と内容が’=’で結ばれており,’|’で区切られている.
その正規表現を作り’=’の前後をタプル形式で出力.
辞書型に変更するためOrderedDict関数を使用.“`.py
from collections import OrderedDict
OrderedDict(re.findall(r’\|(.+?)\s=\s*(.+)’, text[0]))
>>>OrderedDict(
python3 辞書型
##辞書の基本
“`
n = int(input())zaisan = {}
for i in range(n):
[s,a] = input().split()
zaisan[s]= aS = input()
print(zaisan[S])
print(zaisan)
“`
・zaisan = {} とすることで辞書を初期化して 変数 zaisan に代入できます。
・zaisan に s に対応する値 a を追加するには zaisan[s] = a とします。(重要)
・zaisan における S に対応する値にアクセスするには zaisan[S] とします。入力例1
2
Kirishima 1
Kyoko 2
Kirishima出力例1
1
“`
n = int(input())
dmg = {}for i in range(n):
s=input()
dmg[s]=0
#kirishima:0,kyoko:0を作るm = int(input())
for i in range(m
matplotlibで多軸(2軸~4軸)グラフ作成
###はじめに
COVID-19の感染者の推移グラフはNHKやその他のサイトで参照できますが単一グラフです。このようなグラフは時間軸であるx軸に対して、y軸として「感染者数」、「死者数」、「要入院治療者数」、「重症者数」等を同時にグラフ化すると傾向がわかりやすくなります。
そこで、そのようなグラフをmatplotlibで作成するため、多軸(2軸~4軸)グラフ作成のプロトタイプを作成してみました。
その際、「フォントサイズ」、「多軸の数」、「多軸のスケール幅」に応じて多軸の幅をプログラムで調整しているのがこのプログラムの肝です。###プログラム
プログラムは以下の通りです。“`python
# matplotlib 多軸(2軸~4軸)グラフ
import matplotlib as mpl
import matplotlib.pyplot as plt
import japanize_matplotlibdef main():
x = [1, 2, 3, 4] # ※1
y = [[2, 3, 1, 6],
[350, 200, 5
python3 sort 昇順・降順 (記録)
#重要なところは、a.sort(reverse=True)の箇所
# 昇順
“`python
n = int(input())
a = [0]*nfor i in range(n):
a[i] = int(input())a.sort()
for i in range(n):
print(a[i])
“`#降順
“`python
n = int(input())a = [0]*n
for i in range(n):
a[i] = int(input())a.sort(reverse=True)
for i in range(n):
print(a[i])
“`https://note.nkmk.me/python-list-sort-sorted/
#辞書型のソート
“`
n = int(input())
ab = [None]*nfor i in range(n):
[a,b] = input().split()
a = int(a)
b = int(b)
ab[i