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

Python3関連のことを調べてみた2022年02月27日
目次

PythonのParamiko経由でレガシーなサーバーにSSH接続できなかったけど解決した話

PythonのParamikoを使って、以下のようなコードで接続しようと試みたところ。。。

“`:Python
import os
import paramiko

config_file = os.path.join(os.getenv(‘HOME’), ‘.ssh/config’)
ssh_config = paramiko.SSHConfig()
ssh_config.parse(open(config_file, ‘r’))
config_file = ssh_config.lookup(‘レガシーなバージョンの接続先サーバー’)

ssh_client = paramiko.SSHClient()
ssh_client.load_system_host_keys()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
hostname=config_file[‘hostname’],
username=config_file[‘user’]

元記事を表示

【備忘録】Beautiful Soup 4の.stringの挙動を正しく理解していなかった話

# 要約

`.string`は挙動をしっかり把握して使わなくてはいけない。

子タグを残して文字列を取得したいときはBeautiful Soup 4を利用せずに`re.sub()`などを用いることを検討するべきかもしれない。

# 環境

* python : 3.10.1
* BeautifulSoup4 : 4.10.0
* Windows11

# 経緯

https://github.com/msattova/trpgLOG2md

先日、[こちらの記事](https://qiita.com/msattova/items/8120b23f2470667af359)で宣伝したこのプログラムに「`
`を含む``タグの内側の文字列がなぜかちゃんと出力されない」問題が見つかりました。

問題のコードがこちら:

“` python:app.py
def __search_and_get(self):
messages = self.soup.find_all(‘p’)
get_inner = slice(1, -1)
for msg i

元記事を表示

特定文字列を含む行のみを抽出しdf化/グラフ化

実験で得られるログデータについて、必要箇所のみを抽出し、グラフ化するまでを備忘録としてまとめる。

“`
import pandas as pd
import japanize_matplotlib #日本語文字化け回避

path = ‘log.txt’

#テキストファイルの中身をリストとして取得
#ファイルを開き、readlines()で各行を要素とするリストを取得する
with open(path) as f:
lines = f.readlines()
#readlines()で取得できるリストは行末の改行文字\nを含んでいる。除去したい場合はリスト内包表記で各要素(各行)にstrip()メソッドを適用する。
lines_strip = [line.strip() for line in lines]
print(lines_strip)
#各行がリスト形式で表示される

#各行を要素とするリストからリスト内包表記で条件を満たす行のみを抽出
#今回はTempを含む行を抽出
Temp = [line for line in lines_strip if ‘Temp’

元記事を表示

備忘録 wslからusbカメラにアクセス

## 環境構築

### wslカーネルのビルド

– 下記の通り

– [https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf#2-usage](https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf#2-usage)

## 実行(Powershell ⇒ wsl)

### PowerShell(管理者)

– 下記のコマンドで使用したいカメラの番号を取得(例:1-4)

“`bash
$ usbipd wsl list
“`
– 有効化

“`bash
$ usbipd wsl attach –busid 1-4
“`
### wsl

– usbカメラのデバイスファイルのパーミッションを変更

“`bash
$ sudo chmod 777 /dev/video*
“`

– `fswebcam`による動作確認

“`bash
$ fswebcam -d /dev/video0 -r 640×480

元記事を表示

[python] kd木を使った最近傍探索

# 説明
k-最近傍法(k-NN)アルゴリズムの勉強をしている時に、最近傍点を探すのにすべての点に対して計算していく(線形探索と呼ばれる)ととても効率が悪いということを聞いた。
効率よく探索する方法の一つにkd木というデータ構造をつかうものがあるらしいので、それを自分で実装してみた。
そして実際どの程度はやいのか、線形探索とkd木、そしてsklearnのNearestNeighborsを比較した。

参考:Kd-treeと最近傍探索 https://hope.c.fun.ac.jp/mod/resource/view.php?id=15284

# 実行環境
* Intel(R) Core(TM) i7-8700 6コア12スレッド
* メモリ16GB
* windows10 64bit
* 仮想8コア、物理4コア
* Python 3.8.11
* ANACONDA
* JupyterLab 3.1.7

# コード

## モジュール

“`python:modules
import numpy as np
import matplotlib.pyplot as plt
impo

元記事を表示

Python ログの重複が出たときに確認すること

モジュールが増えてくるとロガーも必要に応じて追加しますよね。そのに落とし穴があって、ルートロガー以外にハンドラーを設定するとログの重複が発生するのです。

“`
{
‘root’: {
‘level’: ‘DEBUG’,
‘handlers’: [‘console’, ‘file’],
‘propagate’: True
},
‘mod1’: {
‘level’: ‘DEBUG’,
‘handlers’: [‘console’, ‘file’],
},
‘mod2’: {
‘level’: ‘DEBUG’,
‘handlers’: [‘console’, ‘file’],
},
}
“`

こんな感じにやると、ログの重複が起こります。

ドキュメントの一番上にこのような注釈があります。

>注釈 ハンドラを、あるロガー と その祖先のロガーに接続した場合、同一レコードが複数回発行される場合があります。一般的に、ハンドラを複数

元記事を表示

リストであそぼう

# リストの諸々

## リストに突っ込む

“`Python
a = “123abc”
l = list(a)
l
“`
“`
[‘1’, ‘2’, ‘3’, ‘a’, ‘b’, ‘c’]
“`

## リストから文字列へ
“`Python
print(“”.join(l))
“`
“`
123abc
“`

## 一部を取り出す
### スライス
“`Python
l[1:3]
“`
“`
[‘2’, ‘3’]
“`
### 条件を付ける
“`Python
[x for x in l if x == “2”]
“`
“`
[‘2’]
“`

## リストに要素を追加

### 一番後ろに追加 list.append()
“`Python
l.append(“d”)
print(l)
“`
“`
[‘1’, ‘2’, ‘3’, ‘a’, ‘b’, ‘c’, ‘d’]
“`

### 指定したインデックスに追加 list.insert(index, 追加したい要素)
“`Python
l.insert(3, 4)
print(l)
“`

元記事を表示

Python pytestでcaplogがログをキャッチできないとき

# 結論

:::note info
loggersのconfigでpropagateを**True**にする
:::

“`python:dictConfigの例
{
‘loggers’: {
‘logger_name’: {
‘level’: ‘DEBUG’,
‘handlers’: [],
‘propagate’: True # ここです
}
}
}
“`

# 参考

https://docs.python.org/ja/3/library/logging.config.html#module-logging.config

> loggers – 対応する値は辞書で、そのそれぞれのキーがロガー名になり、それぞれの値が対応する Logger インスタンスをどのように環境設定するかを記述する辞書になります。
>環境設定辞書は、以下のキーを検索されます:
> propagate (任意)。ロガーの伝播の設定です。

元記事を表示

Python リストやタプルを複数の範囲で指定したい!

# はじめに
テストでassertでexpectedとresultを比較するときに、resultに動的な値があるためテストしづらかったので、静的な値のみを取り出すために考えた

(静,静,静,静,静,静,静,静,静)
(静,静,静,静,動,静,静,静,静,静)

“`python
import itertools
import copy

# 5番目以外の要素がほしい
ls = [0,1,2,3,4,5,6,7,8,9,10]

genr = itertools.chain(range(0,5),range(6,11))

# ジェネレータの中身
print(list(copy.deepcopy(genr)))

# 取得結果
print([ls[i] for i in itr])
“`
“`
[0, 1, 2, 3, 4, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 6, 7, 8, 9, 10]
“`

# 感想

うわっ、静、連続して書いたら気持ち悪くなった
静って字、こんなに難しい字だった?

元記事を表示

【Python】DockerでOpenCVをインストールする時の設定

# はじまり

DockerでPython用のコンテナをビルドする時に
OpenCVも一緒にインストールしたら躓いたので、備忘録。

# 最初に躓いたイメージ

まず、このイメージでビルドししてopencvを利用しているプログラムを実行しました。

“`Dockerfile
FROM ubuntu:latest

ENV PYTHON_VERSION 3.7.1
ENV HOME /root
ENV PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION
ENV PATH $PYTHON_ROOT/bin:$PATH
ENV PYENV_ROOT $HOME/.pyenv

RUN apt update

RUN apt install -y python3 python3-pip
RUN pip install –upgrade pip

WORKDIR /usr/src/app
COPY ./ /usr/src/app

RUN pip install opencv-python
“`

そうしたら、こんなエラーが出現。

“`shel

元記事を表示

Python itertoolsつかって多次元リストを1次元リストにしてリスト内包表記でforループさせたらリストが消えた!?

itertoolsでchainして生成されるのはリストではなくて、**itertools.chainクラス**。こいつは**ジェネレータ**だから、forで最後までループさせると空になるまでnext()しちゃうって訳さ!

以下で動作確認をしてみるね!

“`python
import copy
import itertools

ls = [[1,2,3],[4,5,6]]

genr = itertools.chain.from_iterable(ls)

print(type(genr))

# 1が取り出される
print(next(genr))
# 2が取り出される
print(next(genr))

# この時点の要素
print(list(copy.deepcopy(genr)))
# ここでコピーせず、そのままprintすると
# 全要素がnext()されてしまうので注意
# print(list(copy.deepcopy(genr)))
# genr = [] になってしまう

# 奇数を取り出す例
pick_out_odd =[n for n in genr

元記事を表示

python,OpenCVでハムスター(キンクマ)と床材を見分けたい

# はじめに
キンクマハムスターと床材の色が似すぎているのでなんとかして切り分けたいと思います。

# 環境
windows10
python3.9.4
opencv-python 4.5.5.62
numpy 1.20.2

# HSVで色抽出してみる

とりあえず我が家のハムスターを適当に画像処理します。
ここではOpenCVを使いました。

## 詳細
### インポート
“`python
import numpy as np
import cv2

`

元記事を表示

ARC034 B問題を解説する。 (PythonのACコードあり)

#ARC034 B問題 方程式
##問題
たとえば、$f(5391)=5+3+9+1=18$ のように、各桁の和を関数$f(x)$で定義する。
$1\leq N\leq 10^{18}$を満たす$N$が与えられるので、$x+f(x)=N$となる$x$を求めてください、という問題。

https://atcoder.jp/contests/arc034/tasks/arc034_2

##考察その1 xの上限は?

たとえば、$N=100$のとき、$x$は$100$以上の値をとりません。$100+f(100)>100$だからです。
どのような$N$が与えられても、$x

元記事を表示

ロジックサマナー ランクC「圧縮」(Python3) を解いた

# はじめに

**[ロジックサマナー](https://paiza.jp/logic_summoner/)というプログラミング学習サイトの問題の一つです。**

解けるやろって適当に思ってたら、全然正答できなくて悩んでました。数日経っても、意地張って解こうとしましたが、解けなかったです。
そこで答えを探したんですが、欲しいコードがなかった。
なので、私が正答したソースコードをここに載せます。

# 問題の概要

[問題はここにあります](https://paiza.jp/logic_summoner/challenges/logics_type_2001)

#### 制約はこちら
> 入力される値
> S

> 条件
> ・1 ≦ ( S の長さ) ≦ 100
> ・S には “w”(白) か “b”(黒) の文字しか含まれない

#### 入出力例
“`
入力: “bbbwwwww”
出力: 3 5

入力: “wwwwwbbb”
出力: 0 5 3
“`
このように、w(白)から始まった場合は、0 を入れなきゃいけない。

# 正答したソースコード

実装

元記事を表示

distutils の廃止予定(Python 3.12)

こんにちは。
Python 3.12 では “`distutils“` が廃止される予定とのことです。“`pip install“` すると現在警告が表示されます(homebrew/linuxbrew による Python 利用の場合。下記例)。

参考情報として(Homebrew/homebrew-core (GitHub)内)

* “[Python is deprecating distutils.cfg #76621](https://github.com/Homebrew/homebrew-core/issues/76621)”
* “[pybind11 2.9.1 #94696](https://github.com/Homebrew/homebrew-core/pull/94696)”

“`console
$ brew install python3
$ brew info python3 | head -n1
python@3.9: stable 3.9.10 (bottled)
$ python3 -m pip install …
DEPRECATIO

元記事を表示

計算結果分析のためのPython(身内向け)

本記事内では、計算機シミュレーションで出力された座標ファイルから分析を行う際に必要となる、
あるいは知っておくと便利なPythonの機能やモジュールを紹介する。
Pythonの基本的な文法については説明を省いている。

また、本記事はあくまで身内向けの内容であり、あまり丁寧なつくりではない。

# 分析を行うサンプルファイル
サンプルとして、本記事内では以下のファイルに対して分析を行うことにする。
練習用ディレクトリにコピーしておいて欲しい。

“` sample.gro
Methane
15
1MET C 1 2.127 1.952 3.113 0.000 0.000 0.000
1MET H 2 2.235 1.963 3.128 0.000 0.000 0.000
1MET H 3 2.092 1.856 3.139 0.000 0.000 0.000
1MET H 4 2.071 2.025

元記事を表示

これであなたもDockerプロフェッショナル ~Dockerを使用してNginx経由でDjangoを動かしてみようの巻~

#自己紹介
普段私は、
一番得意な機械学習(深層学習)をしたり、
Python/Django でWebアプリを開発したり、
TypeScript/Vue or React でフロントエンドの開発をしたり、
PHP/Laravel でWebアプリを開発したり、
さまざまなことを行っています。

趣味で休みの日にGo言語で色々作成しているのですが、型のある世界は素敵だなと昨今感じています。
今最もやりたいことは、Goで大規模なWebアプリケーションを作成したい。

企業案件やご連絡等ございましたらお気軽に下記よりご連絡いただければと思います。
nagamatsu-k@dym.jp

# 今回やりたいこと
Dockerで構築したコンテナ上で、Nginx経由でDjangoのプロジェクトが見れるようにしたい。

下記コマンドでダウンロードしてください
(注意).envの設定があるので、クローン後に下記の.env2箇所を指示通り変更してください。
[私のGitHub](https://github.com/kouhei-github/Docker-Django-Nginx-Gunicorn)

`

元記事を表示

【備忘録】バイオインフォマティクス環境設定

# 【備忘録】バイオインフォマティクス環境設定(macOS Monterey 12.2.1)

「バイオインフォマティクス 〜Pythonによる実践レシピ〜」を購入して、環境構築したときのメモです。

大まかな流れは、以下の通り。
– Xcodeインストール(GUI)
– wgetインストール(コマンドライン)
– Anacondaインストール(GUI)
– condaによるインストール(コマンドライン)

## condaによるインストール

Xcode、 wget、 Anaconda のインストールは省略して、condaのところだけ詳細に記載します。

######まずは、conda自身の確認。
>$conda install conda -y

######チャネル(リポジトリ)の追加。
>$conda config –add channels bioconda
>$conda config –add channels conda-forge

######環境構築。(biopythonは最新にして、pythonは3.8に設定)
>$conda create -n bio

元記事を表示

Python マルチスレッドで完全にデッドロックなしでSQLite3を使うためのメモ

# はじめに

トランザクションやらコミットのこと無知な状態でマルチスレッドでsqliteやろうとしたらデッドロックしたのでメモ

# threading.Event()でトランザクション前にスレッドを待機させる

“`python
import threading
import random
import time

# event3の中でevent1→event2の順でイベントが実行される
# event1はランダム秒後に開始する、event3の終了を待つ,終了したらevent3_endをclear
# event2はevent1が開始するまで待機状態
# event3はevent1が開始したらevent1をclearにしevent2を待つ
# event3でevent2が開始したらevent2をclearにしevent3の終了を告げる
# 上記繰り返し

test_event1_begin = threading.Event()
test_event2_begin = threading.Event()
test_event3_end = threading.Event()

元記事を表示

Pythonで複数入力(無限入力)を実行する方法

“`python:test.py
import sys

lines = []
for l in sys.stdin:
lines.append(l.rstrip(‘\r\n’))
“`

上記のようなコードでは、

“`
python test.py
“`
のように実行しても無限に入力を受け付けてしまい、最後まで実行できませんでした。
(追記)Linux・Macの場合はCtrl+D、Windows なら Ctrl+Zでできました。コメントありがとうございます。

下記でも実行できます。

“`
echo “test1.txt” “text2.txt” | python test.py
“`

参考:https://stackoverflow.com/questions/43554363/how-to-run-code-with-sys-stdin-as-input-on-multiple-text-files

元記事を表示

OTHERカテゴリの最新記事