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

Python3関連のことを調べてみた2021年01月22日
目次

Pythonのwith文で複数ファイルを一度に開く

# 概要
Pythonでファイルのopenなどに使う`with文`は、カンマで区切って複数のファイルを一度に開くことができます。(python3.1以降)
その場合、複数の with 文がネストされたかのように扱われます。
複数csvファイルのマージなどに役立ちます。

# サンプルコード(python3.6.9で確認)

“`python
import csv

with open(“input1.csv”, mode=’r’) as fi1, open(“input2.csv”, mode=’r’) as fi2, open(“output.csv”, mode=’w’) as fo:
reader1 = csv.reader(fi1)
reader2 = csv.reader(fi2)
writer = csv.writer(fo)

while True:
try:
l1 = next(reader1)
l2 = next(reader2)
except StopI

元記事を表示

Flaskで登録したエラーハンドラを無効化する方法

## はじめに
Flaskのアプリケーションでは [エラーハンドラ](https://flask.palletsprojects.com/en/1.1.x/errorhandling/#error-handlers) という機能を用いて例外発生時のレスポンスを制御できます。

“`python
@app.errorhandler(errors.MyFlaskAppError)
def handle_my_flask_app_error(e):
“””エラーを補足し、専用のレスポンスを返す。”””

return jsonify(e.response_body), e.response_status
“`

ドキュメントにもこのことは詳しく記載されていますし、他にも技術系のブログや記事等でもたくさん紹介されているので、Flaskに詳しくない方でも調べればすぐにたどり着ける情報だと思います。
ただ、ハンドラの登録に対してハンドラの無効化に関する情報がなかなか見つからなかったので、メモがてら紹介します。

## 動作検証環境
* Python 3.9.1
* Flask

元記事を表示

Linux(Ubuntu or Linux Mint or Debian?)でWine!Python!Pyinstaller!!

#1.はじめに
ここに書いてある手順は、Pyinstallerによって推奨されていません。([こちら](https://pyinstaller.readthedocs.io/en/stable/index.html)を参照)
また、動作するかどうか、かなり微妙です。
出力されるファイルが正常でない可能性もあります。
それでもいいという方のみ先へお進みください。
また、すべてのこの記事の内容の実行についての責任はこの記事の読者側にあります。
環境がおかしくなったりしても、責任はとれません。
それでもいいという方のみ先へお進みください。

#2.前提
多分、wine_stableが入れば勝ちです。
バージョンは、6.0.0と、5.0.3で動きました。(環境に依存しそうですが。)
動作報告お待ちしてます。
Pythonは64bit and 32 bit 3.8.5はテスト済みです。
これも動作報告お待ちしてます。
また、ここでは、linux用バイナリについてではなくて、windowsのexeを生み出す方法を紹介しています。
念のため書いときます。
#3.wineインストール!
Ubuntuの

元記事を表示

numpy が pip 経由なら入るのに poetry 経由だと入らない時の一解決案

## TL;DR

### 想定する状況

– numpy がシステムの pip3 経由だと `pip3 install numpy` で問題なく入るのに
– poetry 経由で `poetry add numpy` するとエラーが出てしまう

### 解決案
1. `poetry run pip install numpy` を叩いて、poetry の作った仮想環境の中で pip3 経由で `numpy` を半ば無理矢理放り込む
2. `poetry add numpy` を叩いて、poetry に numpy を認識させ、`pyproject.toml` と `poetry.lock` を更新する

補足:手元の環境でこのステップを実行したのは2021年1月20日です。

## 環境
– OS: macOS Big Sur 11.1
– Python: 3.9.1 (Homebrew 2.7.5 より)
– pip3 20.3.3 (上記Python 3.9.1に付随)
– Poetry: 1.1.4

## 解決までの道筋

### 失敗:numpy1.20.0rc を入れて

元記事を表示

ArgumentParserの使い方のシンプルな例

Pythonで初めてArgumentParserを使ってみました。

使い方に関する記事はいろいろありましたが、取り急ぎやりたいことを調べるのに、時間がかかって、あきらめそうになったので、メモとして残します。

実現したいことは、
* 対象とするデイレクトリをパラメータとして渡す
* 通常は条件に一致したファイルを対象とするが–allと指定されたらすべてを対処とする

下記を実行した時は、testDir内のすべてのファイルを処理対処として

“`
$ python3 check.py testDir –all
“`

–allを指定せず実行した時は、testDir内のすべてのファイルのうち特定のファイルを処理したい

“`
$ python3 check.py testDir
“`

##### ディレクトリをパラーメータとして渡す
まずは初歩の初歩 最初の一歩として

“`
parser.add_argument(‘directry’, help=’input directry’)
print(args.directry)
“`
実行結果

“`
$ pyt

元記事を表示

データ分析用パーツ集

#データ分析用パーツ集
– 履歴
– 2021/01/21 ver1

“`version.cmd
python –version
:: Python 3.7.6
jupyter –version
:: jupyter core : 4.6.1
:: jupyter-notebook : 6.0.3
:: qtconsole : 4.6.0
:: ipython : 7.12.0
:: ipykernel : 5.1.4
:: jupyter client : 5.3.4
:: jupyter lab : 1.2.6
:: nbconvert : 5.6.1
:: ipywidgets : 7.5.1
:: nbformat : 5.0.4
:: traitlets : 4.3.3
“`

## パッケージ

“`import.py
import pandas as pd #データ解析を支援する機能を提供するライブラリ
import numpy as

元記事を表示

PythonでHTMLテンプレートにJSONデータを流し込んで複数のHTMLファイルを一括生成する

共通フォーマットのHTMLテンプレートファイルに対して、別で管理しているデータを流し込んで複数のHTMLファイルを一括で生成してみたいと思います。

## 実行環境
・Node.js 14.15
・Python 3.8
・Jinja

## 手順
1. JSONデータの作成
2. テンプレートHTMLの作成
3. Pythonスクリプトの作成
4. 実行

## JSONデータの作成
JSONのデータは外部APIなどで取得してもよいのですが、今回はローカルで作成し、管理・運用がしやすいようにTypeScriptのオブジェクトから作成したいと思います。

“`types/index.ts
// データの型定義ファイル

type Post = {
id: string;
date: string;
title: string;
author: string;
body: string;
};

export interface PageData {
filename: string;
meta: {
title: string;
descr

元記事を表示

【Django】メモリを節約しつつ大容量ファイルをダウンロードする。

Django で大容量ファイルをダウンロードする際にメモリエラーを回避する方法。
`StreamingHttpResponse`と`wsgiref.util.FileWrapper`を使う。

※関数ベースのviewの実装例を記載

# `HttpResponse`を使う場合

“`python
from django.http import HttpResponse

def download_view(request, *args, **kwargs):
with open(‘path/to/dir/small.csv’, ‘rb’) as f:
response = HttpResponse(f.read(), content_type=’text/csv’)
response[‘Content-Disposition’] = ‘attachment; filename=small.csv’
return response
“`

`f.read()`の部分でファイルの全容量をメモリに読み込んでしまう。

# `StreamingHtt

元記事を表示

Pythonビルトインの分数を扱うfractionsパッケージについて軽く調べてみた。

今更ながら分数を扱うPythonビルトインのfractionsパッケージという存在を知ったので、どんな挙動をするものなのかを軽く調べておきます。

# 記事内で使う環境

Python 3.8.6を使います。残りはビルトインのfractionsパッケージだけ使っていきます。

# 基本の使い方

まずは扱うためにfractionsパッケージのimportが必要になります。特にFractionクラスが利用のメインとなるため、そちらをimportします。

“`py
from fractions import Fraction
“`

Fraction(分数)クラスはnumerator(分子)という第一引数とdenominator(分母)という第二引数を受け付けます。

“`py
f = Fraction(numerator=3, denominator=4)
“`

インタラクティブシェルやJupyter上でFractionクラスのインスタンスを表示してみると、分子と分母の値を含んだ形でrepr的に表示されます。

“`py
>>> f

Fraction(3, 4)
“`

元記事を表示

Pythonのクラスの書き方

#目的
pythonを勉強しているうえで、クラスの書き方に理解が一度で追いつかなかったので、アウトプットして定着させる。

#クラスとインスタンス

– クラス・・・プログラミングにおいて、「モノ」を生成するためのレシピ的なもの

– インスタンス・・・レシピをもとに生成された「モノ」

##クラスの宣言方法
クラスを扱うには、宣言する必要がある。

“`python:sample.py
#クラスの宣言
class SampleClass():
“`

##クラスの使い方
クラスの中で関数を定義することができる。
クラスの中で定義された関数のことを**メソッド**という。

メソッドの定義の方法は通常の関数と同じだが、第1引数にselfを使う。

“`python:sample.py
#クラスの宣言
class SampleClass():
def hello(self):
print(“Hello World!”)
“`

##インスタンス変数の生成
インスタンスには色々な情報を定義することができる。
八百屋さんで売っていそうな品物を例にしてみる。

元記事を表示

Anaconda3で bad interpreter :Not such file or directoryが出た時の対処法と原因究明した話。

# 自分の環境
“`
macOS Catalina version 10.15.5
Python3.8.5
Anaconda3
conda 4.9.2
anaconda Command line client (version 1.7.2)
“`

# エラー状況

“`Bash:エラーメッセージ
$ jupyter lab
-bash: /Users/+++/anaconda3/bin/jupyter:
/Users/***/opt/anaconda3/bin/python: bad interpreter:
No such file or directory
“`

しばらくぶりに、Anacondaの環境でJupyter labを実行しましたが、上記のエラーが出てしまいました。
今回は、対処方法と原因を探ってみました。間違っていたらすみません!

なおJupyter labがわからない方は、Jupyter notebookと考えていただいても構いません。
おそらく今回のエラーにおいて、両者に大きな違いはありません。[^1]

# 試したこと
### 同様の記事があった。
[

元記事を表示

multiprocessingを使ってflask起動後に他の処理を立ち上げる

### きっかけ
flaskを起動しつつ、他の処理をさせたいことがあったので、なんとかならないかなと書いてみました。とりあえず動いたので公開します。長時間の検証はしていません。

### 動作環境
Python 3.9.1
flask 1.1.2

“`flask_hogehoge.py
from flask import Flask
from multiprocessing import Process
import datetime
import time

app = Flask(__name__)

@app.route(‘/’)
def index():
return “Hello World!”

def hogehoge():
i = 0
while True:
print(“{}, {}”.format(i, datetime.datetime.now()))
i += 1
time.sleep(10)

def run(**kwargs):
app.run(**kwargs)

元記事を表示

[python] Redmine APIで情報を読み込む

# 初めに
プロジェクト管理SWであるRedmineに関して、Pythonを用いて情報を読み込む操作をまとめた。
以下の環境で実施した。

|||
|—|—|
|os|windows|
|python|3.7.1|
|python-redmine|2.3.0|
|anaconda|4.8.5|

# python-redmineとは
PythonからRedmineを操作できるAPI。
チケットやプロジェクトの作成、読み込み、更新、削除が可能。
本記事は読み込みのみを対象とする。

# インストール方法
[anaconda cloud](https://anaconda.org/auto/python-redmine) からインストール。

“`bash
$ conda install -c auto python-redmine
“`

# 接続設定
Redmineへ接続するにはRemine側とpython側で設定する必要がある。

## Redmine側
管理者権限を有するユーザが、Redmine設定を行う。
[管理] → [設定] → [REST APIによるWebサー

元記事を表示

【Python】OpenCVで使うパスに日本語を入れてはならない

#はじめに
タイトルの通り。
OpenCVがどうしてもパスを読み込んでくれずにハマってしまったので、どうしたものかと調べてみるとどうやら、パスに日本語を入れると正常に動作しないということがわかった。

# 想定ファイル構成
C:

ユーザー

test01.jpg TestOpenCV.py

#だめな例
“`python:TestOpenCV.py
import cv2
filename = “C:/ユーザー/test01.jpg” # ファイルパスの「ユーザー」がアウトで読み込んでくれない
img = cv2.imread(filename,0) # img = Noneになる
“`

#解決方法
日本語をパスに含めないか、相対パスを使う。

# よい例
“`python:TestOpenCV.py
import cv2
filename = “C:/User/test01.jpg” # 「ユーザー」を「User」にする
filename = “./test01.jpg” # 名前を変えられない場合はTestOpenCV.pyから見た相対パスにする
img = cv2.i

元記事を表示

兎にも角にもPythonの開発環境をローカルに最速で作る(初学者用)

# 背景
いままで `Node.js` でスクレイピングしていたが、昨今盛り上がりを見せる? `Python` でスクレイピングできるようになっておきたい。
ついでにいうと、機械学習だとかAIだとか、要するに流行りに乗っかりたい…と考えている。
なので、とりあえず動くローカル環境を作って、兎にも角にも `Python` を触りたい。
とか、考えている初学者が、兎にも角にも `Python` を動く環境を作れるようにするためのTips。

# 本記事の想定読者
– ビジネスだが、Pythonを触れるようになりたい方
– とにかくPythonを始めたい、触りたい、実験したい方
– Pythonを使って、動的Webサイトをスクレイピングしたい方

# 前提条件
– MacOS 10.15 Catalina
– Homebrewインストール済み

# 方針
– macOSにはデフォルトで `/usr/bin/python バージョン2.x系` がインストールされているが、本記事では `バージョン3.x` を使えるようにする
– `Python` のバージョン管理は考えない。したがって、 `py

元記事を表示

Azure IoT Hub に paho で pub/sub (CA 認証)

こちらのプログラムを SAS トークンから CA 認証に変更しました。
[Azure IoT Hub に paho で pub/sub](https://qiita.com/ekzemplaro/items/5bb6c666d9ddb0127a0f)“

次のファイルが必要です。

“`text
/etc/ssl/certs/Baltimore_CyberTrust_Root.pem
devicethird.pem
devicethird.key
“`

devicethird.* は openssl で作成します。

“`py:publish_ca.py
#! /usr/bin/python
#
# publish_ca.py
#
# Jan/19/2020
# ——————————————————————
import sys
from paho.mqtt import client as mqtt
import ssl

# ————————-

元記事を表示

[Python]変数や引数として扱うCallableオブジェクトに対する型アノテーションの書き方

Pythonで関数やメソッドを変数や引数(Callableオブジェクト)として扱う必要が出て来る時があります。

そういった時の型アノテーション周りについて備忘録も兼ねて記事にしておきます。

# 使う環境

– Python 3.8.5
– VS Code
– VS Code拡張機能のPylance(型チェックや補完用)
– ※詳細は以前書いた[[Python]PylanceのVS Code拡張機能をさっそく使ってみた。](https://qiita.com/simonritchie/items/33ca57cdb5cb2a12ae16)などの記事をご確認ください。

# まずは型アノテーションの無い状態

とある以下のような関数があり、引数に関数のオブジェクト(`func`)と任意の値(`x`)を受け付けるとします。

“`py
def any_function(func, x):
return func(x)
“`

当たり前ですがこれだとVS Code上でマウスオーバーしてみても型などの情報がUnknownとなってしまいます。Pylance(Pyright)など

元記事を表示

[python]ライブラリramkanのインストールでエラーになる

[ramkan](https://pypi.org/project/romkan/)はローマ字/仮名変換用のライブラリ。
インストールする際にエラーが起きたので忘備録。

## エラー内容

ramkanのインストール

“`
$ pip3 install romkan
“`

するとこういうエラーが起きる。

“`
Collecting romkan==0.2.1
Downloading romkan-0.2.1.tar.gz (10 kB)
ERROR: Command errored out with exit status 1:
command: /home/scaruadmin/venv/bin/python3 -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘”‘”‘/tmp/pip-install-8y_m14tz/romkan_f9a5712add8043608044b16dab0fc01c/setup.py'”‘”‘; __file__='”‘”‘/tmp/pip-install-8

元記事を表示

pythonistaでScroll Viewの実装方法1

# はじめに
地図をスクロールしながら見ている時の様に、
大きな画像の一部を画面に表示して、スクロールさせる。
これは uiライブラリのscroll View を、使用すれば実装できます。

# 環境
ios + pythonista3

# 使用ライブラリ
ui ライブラリのviewを使用します。
“`
import ui
“`

[pythonista ui ドキュメント](omz-software.com/pythonista/docs/ios/ui.html)

pythonistaのドキュメントは、それなりに丁寧に記載されているので 初心者でもある程度
分かります。
英語が優しいのか、自動翻訳様のお力を全面的にお借りしている身でも なんとか理解できました。

# とりあえず実装してみる

“`php:scrollview_image.py
#! python3
#
# 20210118 ver001 scrollviewに大きな画像を見て表示してスクロールを実装。
#

import ui #scrllviewやimageviewを表示するライブラリ

cla

元記事を表示

pythonでスプレッドシートとSlackを連携させてBOTを作ってみる2/2(python+gspread+slackbot)

##はじめに
[前回の記事](https://qiita.com/KScookie/items/580d000d1eda58bfa8b4)では、Slack上でスプレッドシートにあらかじめ登録されている単語をBOTに送信すると、その意味を返してくれるというところまで実装しました。

今回はその続きです。

##やりたいこと
* 単語の登録

* 登録されている単語の一覧出力

* 単語の削除

* これら全てSlack上で完結させる

##コードを書いていく

コードを追加するのはmy_mention.pyだけです。

“`python:my_mention.py
@respond_to(‘登録:(.*)’)
def mention_func2(message, entry_word):
entry_list = entry_word.split()
entry_len = len(entry_list)
values_list = worksheet.col_values(1)
if entry_len == 2:
gyou = len(values_list

元記事を表示

OTHERカテゴリの最新記事