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

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

[Python] Outlookでメール作成

# 初めに
Pythonを用いたOutlookでのメール作成を実施する。
以下の環境で実施した。

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

# インストール

anaconda環境であれば、デフォルトでインストール済み。
インストールに関するメモを記載する。

“`bash

conda install pywin32
“`

# mailの作成

ライブラリを用いてメールを作成する。
Outlookを用いたMailItemオブジェクトは以下を参照する。
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.mailitem

“` python

import win32com.client

# Outlookのmailオブジェクト設定
outlook = win32com.client.Dispatch(‘Outlook.Application’)
objMail= outlook.Creat

元記事を表示

Pythonを駆使してパワポの作成過程を最大限自動化する

# 要約
– とある運用保守プロジェクトでの月次レポート作成作業を徐々に改善していくお話
– データベースから抽出した情報をもとに行うExcelでの加工・集計をPython + Excel VBAで自動化
– Excelで加工・集計した内容をパワポにまとめる作業をPythonのライブラリ(python-pptx, Openpyxl)を駆使して自動化

# 環境

– Windows10 64bit
– Python 3.7
– python-pptx
– Openpyxl

“`python:pip
pip install python-pptx

# Anacondaをインストールしている環境であれば不要
pip install openpyxl

“`

# ■改善その1

## ▼問題提起

話は遡ること約3年前。
とある運用保守のプロジェクトに参入した私は月次レポートの作成を引き継ぐことに。

– 1.データベースから必要な情報を抽出する
– 2.抽出した情報を元にExcelで加工・集計を行う
– 3.加工・集計した内容をパワポにまとめる

大雑把に言うとこ

元記事を表示

pytorch DistributedDataParallel 事始め

# はじめに
DistributedDataParallel(以下、DDP)に関する、イントロの日本語記事がなかったので、自分の経験をまとめておきます。

pytorchでGPUの並列化(特に、DataParallelを行う場合、[チュートリアル](https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html)では、[DataParallel Module](https://pytorch.org/docs/stable/generated/torch.nn.DataParallel.html#torch.nn.DataParallel)(以下、DP)が使用されています。
しかし、公式ドキュメントをよく読むと、[DistributedDataPararell](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataP

元記事を表示

tkinterのEntryから取得した値をリストの末尾に追加する

#背景
クラスがよくわかっていなかったので、自らの勉強を兼ねて書いてみた。

#クラスのコードを試しに書いてみる
試しに、以下のような簡単なクラスを書いてみる。

“`python3:tkclass.py
class x:
def __init__(self,x): #クラスを実行したときに必ず実行されるメソッド
self.x = x
def go(self):
self.x = x #__init__で取得した変数xを引き継いでいる。
print(x)
“`
ここで、Xというのがクラスの名前である。
また、クラス内での関数はメソッドと呼ばれる。

ただ、ここでxの内容を入れてもこのままでは呼び出されない。
ここで、インスタンスというものを定義する

“`python3:test.py
yobidashi =x(10)
“`
このyobidashiが、インスタンス名(クラスを呼び出したいときの名前)である。
(10)は、xに入れたい引数を入れている。

“`python3:test.py
yobidashi =x

元記事を表示

[Python]リストの最後から順に取り出す

# はじめに
気まぐれでアルゴリズムの問題を解くことがあるのですが、このときは普段利用しないPythonを選択しています。
その中で、Pythonにおいて「リストの最後から順に要素を取り出す」という操作をどうしたらいいのかで悩みました。

Python自体、めったに利用することがなく、基本的なfor文の書き方すら頭から抜け落ちることもあるため、
基礎から学び直しつつ、最後に「リストの最後から順に要素を取り出す」にチャレンジします。

また、こちらは、[エンジニアの新たな学びキャンペーン](https://qiita.com/official-events/716dbcb617afc83e9555)に向けた記事となります。

# まず基本的なfor文から

> “`py
for 変数 in データの集まり:
実行する処理
“`
[【基礎を全解説】はじめての人の無料で学べるPython超入門!](https://www.udemy.com/course/python-free-intro/)

適当なリストを作成し、そのリストについて操作してみます。

“`python

元記事を表示

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

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

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

2021-01-22: @shiracamus さんのコメントを反映しました。ありがとうございます。

“`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)

for l1, l2 in zip(reader1, reader2):

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事