テンプレートテスト
ブログの説明
ブログの説明2
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
ラベル
Python
の投稿を表示しています。
すべての投稿を表示
ラベル
Python
の投稿を表示しています。
すべての投稿を表示
2020/03/07
[Python] matplotlib で plot する際に "Tcl_AsyncDelete: async handler deleted by the wrong thread" というエラーがでる
update
event_note
label
Python
matplotlib を使って画像を作成する場合に、たまに以下のようなエラーが表示されます。
**エラー内容** ```sh Exception ignored in:
Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 4014, in __del__ self.tk.call('image', 'delete', self.name) RuntimeError: main thread is not in main loop Exception ignored in:
Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 4014, in __del__ self.tk.call('image', 'delete', self.name) RuntimeError: main thread is not in main loop Exception ignored in:
Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 4014, in __del__ self.tk.call('image', 'delete', self.name) RuntimeError: main thread is not in main loop Exception ignored in:
Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 4014, in __del__ self.tk.call('image', 'delete', self.name) RuntimeError: main thread is not in main loop Tcl_AsyncDelete: async handler deleted by the wrong thread ``` ググってみたところ、`matplotlib.use('Agg')` を追加すればよいそうなので、以下のようにして追加しました。 ```py import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt ``` とりあえず今のところ、このエラーは表示されなくなりました。
## 参考 URL - https://catdance124.hatenablog.jp/entry/2019/09/20/113202 - https://stackoverflow.com/questions/50848127/python-plot-image-save-error - https://qiita.com/TomokIshii/items/3a26ee4453f535a69e9e
Read more
2020/03/03
[Python] 非同期処理を完了を待たずに実行する(fire and forget)
update
event_note
label
Python
C# における `async void` と同様の処理を Python ではどうやって書くのか分からなかったので、サンプルコードをメモしておきます。
尚、完了を待たずに実行することを、英語では `fire and forget` というようです。 ## 環境 - python 3.6 ## サンプルコード ```py def foo(sec: int): print(f'start: {sec}秒待ちます') time.sleep(sec) print(f'finish: {sec}秒待ちました') loop = asyncio.get_event_loop() loop.run_in_executor(None, foo, 3) # プログラムが終了しないように待っているだけ(実際には以下は不要) print(f'wait') time.sleep(10) print(f'exit') ``` **出力結果** ```sh start: 3秒待ちます wait finish: 3秒待ちました exit ``` ## もうちょっと汎用的に ```py def fire_and_forget(task, *args, **kwargs): loop = asyncio.get_event_loop() if callable(task): return loop.run_in_executor(None, task, *args, **kwargs) else: raise TypeError('Task must be a callable') def foo(sec: int): print(f'start: {sec}秒待ちます') time.sleep(sec) print(f'finish: {sec}秒待ちました') fire_and_forget(foo, 3) # プログラムが終了しないように待っているだけ(実際には以下は不要) print(f'wait') time.sleep(10) print(f'exit') ``` 出力結果は同じなので省略します。
## 参考 URL - https://dev.classmethod.jp/etc/python-asyncio/ - http://zentoo.hatenablog.com/entry/2016/06/13/045354 - https://qiita.com/kekeho/items/2339ab36bc05d979810a - https://stackoverflow.com/questions/37278647/fire-and-forget-python-async-await
Read more
2020/02/29
[Python] ISO 8601 形式の文字列を datetime に変換する
update
event_note
label
Python
日時を表す形式はいろいろありますが、ここでは ISO 8601 形式の文字列を datetime オブジェクトに変換する方法について記載します。
## 環境 - python 3.6 python 3.7 以降では `fromisoformat()` が使えるみたいですが、今回は諸事情により python 3.6 を対象としています。 ## datetime オブジェクトへの変換 単純に変換するだけのサンプルコードです。 ```py from datetime import datetime timestamp = "2018-03-30T12:34:56.789Z" dt = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%f%z') print(dt) ``` **出力結果** ```sh 2018-03-30 12:34:56.789000+00:00 ``` ## datetime オブジェクト同士で差分を計算する場合 ```py from datetime import datetime import pytz timestamp = "2018-03-30T12:34:56.789Z" dt = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%f%z') utc_now = datetime.now(pytz.timezone('UTC')) tdelta = utc_now - dt print(tdelta.total_seconds()) ``` **出力結果** ```sh 60572020.293181 ```
## 参考 URL - https://docs.python.org/ja/3/library/datetime.html - https://qiita.com/kidatti/items/272eb962b5e6025fc51e - https://stackoverflow.com/questions/796008/cant-subtract-offset-naive-and-offset-aware-datetimes
Read more
2020/01/22
[Python] インデックス付きのループ
update
event_note
label
Python
リストなどを for で回すときにインデックスが欲しい場合は `enumerate` を使います。
## 環境 - python 3.8.1 ## サンプルコード ```py hoge = [10, 20, 30] for index, value in enumerate(hoge): print(index, value) ``` **実行結果** ```sh 0 10 1 20 2 30 ``` ## 逆順で出力するときの注意 単純に逆順で出力すると以下のようになります。 ```py hoge = [10, 20, 30] for index, value in enumerate(hoge[::-1]): print(index, value) ``` ```sh 0 30 1 20 2 10 ``` インデックスも逆順に出力したい場合は少し計算してやる必要があります。 ```py hoge = [10, 20, 30] for index, value in enumerate(hoge[::-1]): print(len(hoge) - index - 1, value) ``` ```sh 2 30 1 20 0 10 ```
Read more
2020/01/08
[Python] 書式指定で変数を使う
update
event_note
label
Python
文字列出力で書式指定を行う際、桁数などの指定で変数を使う方法です。
例えば、以下のように数値を10桁の右揃えで出力する場合。 ```py a = 1234 b = -1.234 print(f'{a:>10}') print(f'{b:>10}') ``` ```sh 1234 -1.234 ``` この `10` という数値を変数で指定したいときは以下のように記述します。 ```py a = 1234 b = -1.234 digit = 10 print(f'{a:>{digit}}') print(f'{b:>{digit}}') ``` ```sh 1234 -1.234 ``` 入れ子にしているだけですね。
Read more
2020/01/07
[Python] 文字列の出力
update
event_note
label
Python
C# の文字列補間のような書き方で文字列を出力できないかなと思って調べたら、`f-string`(フォーマット済み文字列リテラル)というのがそれに該当するようです。
## 環境 - Windows 10 - Python 3.8.1 ## f-string Python 3.6 以降で使えるようです。 ```py a = "hoge" b = 1234 c = 0.1234 print(f'{a} {b} {c}') ``` ```sh hoge 1234 0.1234 ``` ## 書式指定 以下、書式指定の方法です。 ### 左寄せ、中央寄せ、右寄せ `<` `^` `>` で左寄せ、中央寄せ、右寄せができ、全体の文字数を数値で指定する。 ```py a = "hoge" b = 1234 c = 0.1234 print(f'{a:>10}|{b:>10}|{c:>10}|') print(f'{a:^10}|{b:^10}|{c:^10}|') print(f'{a:<10}|{b:<10}|{c:<10}|') ``` ```sh hoge| 1234| 0.1234| hoge | 1234 | 0.1234 | hoge |1234 |0.1234 | ``` ### ゼロ埋め ゼロパディングは数値に対してのみ有効です。 (文字列に対して指定するとエラーになりました) ```py a = 1.2345 b = 1234 c = -1.2345 d = -1234 print(f'{a:08}') print(f'{b:08}') print(f'{c:08}') print(f'{d:08}') ``` ```sh 001.2345 00001234 -01.2345 -0001234 ``` ### 小数点以下の桁数、有効桁(有効数字) こちらも数値に対してのみ有効です。 (文字列に対して指定するとエラーになりました) ```py a = 1.2345 b = 1.2 c = 1234 d = -1.2345 e = -1.2 f = -1234 print(f'{a:.3f}') print(f'{b:.3f}') print(f'{c:.3f}') print(f'{d:.3f}') print(f'{e:.3f}') print(f'{f:.3f}') ``` ```sh 1.234 1.200 1234.000 -1.234 -1.200 -1234.000 ``` **ゼロパディングとの組み合わせ** ```py a = 1.2345 b = 1.2 c = 1234 d = -1.2345 e = -1.2 f = -1234 print(f'{a:010.3f}') print(f'{b:010.3f}') print(f'{c:010.3f}') print(f'{d:010.3f}') print(f'{e:010.3f}') print(f'{f:010.3f}') ``` ```sh 000001.234 000001.200 001234.000 -00001.234 -00001.200 -01234.000 ``` **左寄せ、中央寄せ、右寄せとの組み合わせ** ```py a = 1.2345 b = 1.2 c = 1234 d = -1.2345 e = -1.2 f = -1234 print(f'{a:>10.3f}|{b:>10.3f}|{c:>10.3f}|{d:>10.3f}|{e:>10.3f}|{f:>10.3f}|') print(f'{a:^10.3f}|{b:^10.3f}|{c:^10.3f}|{d:^10.3f}|{e:^10.3f}|{f:^10.3f}|') print(f'{a:<10.3f}|{b:<10.3f}|{c:<10.3f}|{d:<10.3f}|{e:<10.3f}|{f:<10.3f}|') ``` ```sh 1.234| 1.200| 1234.000| -1.234| -1.200| -1234.000| 1.234 | 1.200 | 1234.000 | -1.234 | -1.200 |-1234.000 | 1.234 |1.200 |1234.000 |-1.234 |-1.200 |-1234.000 | ``` ### 符号表示 こちらも数値に対してのみ有効です。 (文字列に対して指定するとエラーになりました) ```py a = 1234 b = -1234 print(f'{a:+}') print(f'{b:+}') ``` ```sh +1234 -1234 ``` **ゼロパディングとの組み合わせ** ```py a = 1.2345 b = -1.2345 print(f'{a:+08}') print(f'{b:+08}') ``` ```sh +01.2345 -01.2345 ``` **小数点以下桁数との組み合わせ** ```py a = 1.2345 b = -1.2345 print(f'{a:+.3f}') print(f'{b:+.3f}') ``` ```sh +1.234 -1.234 ``` **左寄せ、中央寄せ、右寄せとの組み合わせ** ```py a = 1.2345 b = -1.2345 print(f'{a:>+10}|{b:>+10}|') print(f'{a:^+10}|{b:^+10}|') print(f'{a:<+10}|{b:<+10}|') ``` ```sh +1.2345| -1.2345| +1.2345 | -1.2345 | +1.2345 |-1.2345 | ``` ### 桁区切り ```py a = 123456789.123456789 b = -123456789.123456789 print(f'{a:,}') print(f'{b:,}') ``` ```sh 123,456,789.12345679 -123,456,789.12345679 ``` **桁数、左寄せ、中央寄せ、右寄せとの組み合わせ** ```py a = 123456789.123456789 b = -123456789.123456789 print(f'{a:^20,.3f}') print(f'{b:>20,.3f}') ``` ```sh 123,456,789.123 -123,456,789.123 ```
## 参考 URL - https://docs.python.org/ja/3/tutorial/inputoutput.html - https://note.nkmk.me/python-f-strings/
Read more
2020/01/06
VSCode での Python のデバッグ設定
update
event_note
label
Python
label
Visual Studio Code
Visual Studio Code で Python のデバッグをする際の設定についてです。
## 環境 - Windows 10 - Visual Studio Code 1.41.1 ## デバッグ構成ファイル(launch.json)の作成 デバッグメニューを選択し、`launch.json ファイルを作成します。` をクリックします。
`Debug Configuration` の選択が表示されるので、`Python File` を選択します。
すると、以下のような内容で `launch.json` がワークスペースの `.vscode` フォルダ内に作成されます。 ```json { "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" } ] } ``` 基本的にはこれだけで Python のデバッグが行えます。 ## 引数を指定する デバッグ時に引数を指定したい場合は `launch.json` に `args` の項目を追加します。 ```json "configurations": [ { // 省略 "args": [ "foo", "bar" ] } ] ``` 引数0にはプログラム名が入るので、引数1からを `args` に記述します。 **サンプル** ```py import sys print("Hello World") print("sys.argv[0] : ", sys.argv[0]) print("sys.argv[1] : ", sys.argv[1]) print("sys.argv[2] : ", sys.argv[2]) ``` **実行結果** ```sh Hello World sys.argv[0] : HelloWorld.py sys.argv[1] : foo sys.argv[2] : bar ``` ## 実行ファイルを固定にする VSCode でデバッグを開始するファイルは、デフォルトではアクティブになっているファイルですが、いつも同じファイルでデバッグを開始したい場合などは `launch.json` の `program` を変更します。 デフォルトでは以下のようになっています。 ``` "program": "${file}", ``` `${file}` は現在アクティブになっているファイル名が入ります。 これを例えば以下のように変更します。 ``` "program": "${workspaceFolder}\\HelloWorld.py", ``` `${workspace}` はワークスペースのルートを表します。
## 参考 URL - https://qiita.com/ShortArrow/items/dc0c8cacd696154510f1 - https://www.atmarkit.co.jp/ait/articles/1711/24/news034.html
Read more
2020/01/05
VSCode で Python の import や from のエラーが消えない
update
event_note
label
Python
label
Visual Studio Code
ライブラリをインストール済みにも関わらず、Visual Studio Code 上で import や from の箇所でエラーが表示されたままになっていました。
具体的には、`ModuleNotFoundError` や `Unable to import` といったエラーが表示されます。 ちなみに、普通にプログラムを実行すると正常に動作しますが、VSCode のデバッガで実行すると、上記のエラーの箇所で停止する状態でした。 ## 原因と解決方法 私の場合は VSCode の Python のインタプリターの設定が正しくなかったことが原因でした。 以下を行うことで解決しました。 - `F1` を押す - `Python: Select Interpreter` を入力 - 表示された一覧から適切なインタプリターを選択する
## 参考 URL - https://teratail.com/questions/137869
Read more
2020/01/04
Python で ta-lib をインストールする
update
event_note
label
Python
python で ta-lib をインストールする際、先に ta-lib 自体をインストールしておく必要があるようです。
## 環境 - Windows 10 - Python 3.8.1 ## ta-lib を簡単にインストールする pip でインストールする ta-lib は python ラッパーなので、ta-lib 自体を先にインストールしておく必要があるようです。 しかし、Windows 環境に ta-lib をインストールするには、C/C++ のソースコードをビルドできる環境を構築する必要があるなどかなり面倒なので、ビルド済みの `.whl` をダウンロードしてくるのが最も簡単でした。 以下から `.whl` ファイルをダウンロードし、適当な場所に置きます。 - https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib 今回は Python のバージョンが 3.8.1、実行環境が 64 bit なので、 `TA_Lib‑0.4.17‑cp38‑cp38‑win_amd64.whl` をダウンロードしました。 以下のコマンドを実行してインストールします。 ```sh > pip install TA_Lib‑0.4.17‑cp38‑cp38‑win_amd64.whl ```
## 参考 URL - https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14152445904 - https://cryptocurrencychudoku.hatenablog.com/entry/2018/04/01/140950 - http://shinyaowari.com/archives/1831
Read more
2020/01/03
Windows に Python をインストール
update
event_note
label
Python
Windows に Python の環境を構築します。
## 環境 - Windows 10 - Python 3.8.1 ## インストール方法 以下からインストーラーをダウンロードします。 - https://www.python.org/downloads/windows/ 現時点での最新の `Windows x86-64 executable installer` をダウンロードします。
ダウンロードしたインストーラーを実行して、`Add Python 3.8 to PATH` にチェックを入れてインストールします。
## 確認 コマンドプロントを起動し、以下を実行してインストールされていることを確認します。 ```sh >python --version Python 3.8.1 ```
## 参考 URL - https://www.softantenna.com/wp/windows/python-for-windows-10/ - https://www.atmarkit.co.jp/ait/articles/1906/17/news023.html
Read more
2018/09/10
Visual Studio で Python の開発環境を構築する
update
event_note
label
Python
label
Visual Studio
主題の通り、Python の開発環境として Visual Studio を使用する方法です。
何故 Visual Studio かというと、単に私が普段 C# を使っていて使い慣れているというだけです。 Visual Studio は既にインストール済みの前提で、Python のバージョンは Python3 のみです。 ## 環境 - Visual Studio 2017 (15.8.3) - Windows 10 Pro 64bit ## インストール方法 スタートメニューから `Visual Studio Installer` を起動し、[変更] を押します。 Python のチェックボックスを ON にします。 また、合わせて Anaconda もインストールしたいと思うので、[Anaconda3] のチェックボックスも ON にします。
以上で完了です。 環境 Path の設定なども特に行う必要はありませんでした。 Python2 も使いたい場合などはまたいろいろ設定を行う必要があるみたいですが。 ## プロジェクトの作成 Python 用のプロジェクト (コンソールアプリケーション) を作成する手順は以下です。 - メニューから [File] > [New] > [Project...] を選択 - [Installed] > [Python] を選択 - [Python Application] を選択して OK を押す。
Read more
前の投稿
ホーム
Translate
Popular Posts
ASP.NET Core で AdminLTE を使用する
TortoiseGit でコミットメッセージを変更する
TortoiseGit でリモートリポジトリのタグを削除する
image
NO IMAGE
ASP.NET Core におけるフロントエンドのパッケージ管理
image
NO IMAGE
C# と C/C++ のライブラリを混在させる場合の構成
image
NO IMAGE
[C#] Dictionary の キーがタプルの場合に JSON へのシリアライズとデシリアライズを行う方法
image
NO IMAGE
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
ASP.NET Core (.NET Core) でバックグランドタスクを起動する
image
NO IMAGE
.NET アプリケーションを XCOPY 配置で配布する
image
NO IMAGE
TestLink で LDAP 認証を行う
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
2
AWS Cloud9
4
blockdiag
1
Blogger
10
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
Codecov
1
CSS
1
Docker
28
DokuWiki
4
Doxygen
1
draw.io
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
2
Firefox
5
Git
12
GitBook
4
GitBucket
7
GitHub
7
GitLab
30
Go
1
Google
1
Google Cloud Platform
1
Grafana
5
HTML
5
IIS
8
InfluxDB
6
JavaScript
7
Jenkins
7
Linux
25
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MVC
1
MVVM
6
NLog
3
Node.js
3
npm
1
OpenSSL
3
ownCloud
2
Pine Script
1
PlantUML
5
PowerShell
7
Prism
2
Python
11
Razor
3
Redmine
30
remark.js
2
rocketchat
4
Ruby
3
SignalR
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
t
1
TestLink
2
Tomcat
2
TortoiseGit
10
TortoiseSVN
2
Trading View
1
Travis CI
1
Ubuntu
13
Visual Studio
39
Visual Studio Code
9
Vue.js
8
Windows
56
Windows 10
4
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
1
Xamarin
1
xUnit
5
アプリケーション
1
デザインパターン
1
テスト
3
バッチファイル
2
ぴよ
3
プログラミング
3
ライセンス
1
ラベル
3
ラベル1
2
英語
2
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
▼
2022
(1)
▼
2月
(1)
例えばボタンをクリックしたときに重い処理を実行する場合など、そのまま処理すると GUI が固まって...
►
2021
(24)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
►
2020
(60)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(7)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)