#author("2024-08-11T09:11:32+00:00","default:hotate","hotate") #author("2025-01-09T10:44:15+00:00","default:hotate","hotate") #contents &tag(Python); - [[Python3]] - [[Python3.11]] * [[リファレンス]] [#o58f2946] - [[Pythonに関する情報 | note.nkmk.me>https://note.nkmk.me/python/]] - [[はじめに — Python早見帳>https://chokkan.github.io/python/index.html]] Python早見帳は、Pythonのプログラムと実行例をさっと確認(早見)できるJupyter Notebook(帳)です。 ** [[書籍]] [#k742aa2b] - [[みんなのPython 第4版(SBクリエイティブ)>https://amzn.to/3f5HIby]] Python入門書のデファクトスタンダードが4年ぶりに大改訂。近年、Pythonの利用が、機械学習、AIなどの科学技術分野へ大きく広がっている現状を踏まえて、細部にわたり加筆、修正した。 - [[Python実践入門(技術評論社)>https://amzn.to/3e6Ek0c]] Pythonという言語の仕様やその特徴的な機能、標準ライブラリでできることを中心に扱うため、分野を問わず活用していただけます。 * 文字列 [#s3be8c0a] - [[Python, formatで書式変換(0埋め、指数表記、16進数など) | note.nkmk.me>https://note.nkmk.me/python-format-zero-hex/]] 文字列str型のメソッドにもformat()がある。 - [[Cのsprintfのような文字列フォーマット - Python学習日記>https://m-py-study.hatenadiary.org/entry/20100128/1264630396]] 文字列に%演算子を使います。 formatted_msg = 'Hello %s' % str - [[Pythonでエスケープシーケンスを無視(無効化)するraw文字列 | note.nkmk.me>https://note.nkmk.me/python-raw-string-escape/]] 文字列リテラル'...', "..."の前にrまたはRをつけると、エスケープシーケンスを展開せずそのままの値が文字列となる。このような文字列はraw文字列(raw strings)と呼ばれる。 - [[Python文字列操作マスター - Qiita>https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887#%E3%83%90%E3%82%A4%E3%83%88%E5%88%97bytes%E3%82%92unicode%E6%96%87%E5%AD%97%E5%88%97%E3%81%AB%E3%81%99%E3%82%8B]] (バイナリモードでオープンされた)ファイルやソケットから読み込んだデータはそのままだとバイト列なので、unicode文字列に解釈してあげないと文字単位の操作がうまくできません。 バイト列をエンコーディングを指定してunicode文字列として解釈するためにはdecode()メソッドを使います。 ** [[正規表現]] [#s69b8ec0] - [[Pythonの正規表現モジュールreの使い方(match、search、subなど) | note.nkmk.me>https://note.nkmk.me/python-re-match-search-findall-etc/]] re.match(), re.sub()などの関数と同様の処理が、正規表現オブジェクトのメソッドmatch(), sub()として実行できる。 - [[python 正規表現でURLの一致チェック、抽出を行う | trelab>http://trelab.info/python/python-%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%A7url%E3%81%AE%E4%B8%80%E8%87%B4%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%80%81%E6%8A%BD%E5%87%BA%E3%82%92%E8%A1%8C%E3%81%86/]] URLを正規表現のパターンとして表す時、下記のようになる。 https?://[\w/:%#\$&\?\(\)~\.=\+\-]+” - [[Pythonで文字列を検索(〜を含むか判定、位置取得、カウント) | note.nkmk.me>https://note.nkmk.me/python-str-search/]] re.findall()は、マッチするすべての部分を文字列のリストとして返す。その要素数(組み込み関数len()で取得)がマッチした部分の数となる。 ** [[JSON]] [#h6ae57ab] - [[PythonでJSONファイル・文字列の読み込み・書き込み | note.nkmk.me>https://note.nkmk.me/python-json-load-dump/]] 引数ensure_ascii=Falseとすると、Unicodeエスケープされない。日本語の全角文字などがそのまま出力される。 - [[PythonにおいてのJSONファイルの取扱いあれこれ - Qiita>https://qiita.com/wakaba130/items/5f54aed913156dc4438f]] 入出力用のimport jsonが入っているので,別ライブラリのインストールは不要です. - [[PythonでJSONデータを扱う工夫 | TECHSCORE BLOG>https://www.techscore.com/blog/2019/12/16/better-way-handling-json-data-in-python/]] 例えば、dictを継承して属性が有るかのように振る舞うクラスを定義する方法があります。 - [[エラー対処: Object of type datetime is not JSON serializable | Python - BioErrorLog Tech Blog>https://www.bioerrorlog.work/entry/python-datetime-not-json-serializable-error]] 一つ目の簡単で雑な対処法としては、このdefaultパラメータにstrを与えることです。 json.dumps(response,default=str) ** ヒアドキュメント [#zf350717] - [[Pythonのヒアドキュメント - Qiita>https://qiita.com/ykhirao/items/c7cba73a3a563be5eac6]] ** [[utf-8]] [#n1cf6ced] - [[PythonでUTF-8 with BOMを開く - Qiita>https://qiita.com/showmurai/items/60d32006d13512ffeaff]] 'utf_8_sig' と指定する。 * データ [#o1bc887b] - [[PythonでBase64エンコードとデコード | 分析ノート>https://analytics-note.xyz/programming/python-base64/]] 出力結果が b’〜’ となっているのでわかる通り、結果はbyte型で得られます。base64の結果を文字列で欲しい時は、decode()する必要があります。 * 配列 [#ea867260] ** ソート [#nf56d541] - [[Pythonの並べ替えを使う>https://www.isc.meiji.ac.jp/~mizutani/python/sorting.html]] レコードの何番目の値について並べ替えするかを簡単に指定できるモジュール operatorの関数 itemgetter() を使ってレコードを並べ替えることができる。 ** 辞書 [#xab62dcc] - [[Python Tips:辞書にアイテムが存在しない場合のデフォルト値を設定したい - Life with Python>https://www.lifewithpython.com/2015/05/python-dict-default-value.html]] defaultdict を生成する際に関数やクラスなど callable なオブジェクトを渡すと、キーが見つからなかった場合にそのオブジェクトが呼び出されます。 - [[Pythonのリスト、タプル、辞書 - Qiita>https://qiita.com/motoki1990/items/74d850d2aaa5e19b65f1]] 辞書型の変数にキーが存在するか確認するには「in」を使用します。 - [[pythonのdictionaryでKeyErrorを出さないようにする - Qiita>https://qiita.com/sue71/items/b7f5c9373d0af587e256]] コレを回避するためには、事前にin, has_keyなどを用いてキーが存在するか否かをチェックする必要があります。このようなコードになるのですが、上記のような場合はgetという便利なメソッドが用意されているようです。 - [[Pythonの辞書のリストを並び替える - Qiita>https://qiita.com/yousuke_yamaguchi/items/23014a3c8d8beb8ba073]] 辞書の並び替えはlambdaを使う items()を使うのでタプルになる。sort()は使えない。 - [[【python】辞書(dict)のソート方法【sorted関数、降順、lambda、文字列】>https://python-academia.com/dict-sort/]] sorted関数の引数reverseにTrueを渡すことで、降順でソートできます。 ** イテレータ [#k186f0ab] - [[Pythonのイテレータとジェネレータ - Qiita>https://qiita.com/tomotaka_ito/items/35f3eb108f587022fa09]] - イテレータ: 要素を反復して取り出すことのできるインタフェース - ジェネレータ: イテレータの一種であり、1要素を取り出そうとする度に処理を行い、要素をジェネレートするタイプのもの。 * ファイル [#z98b2b29] - [[[Python入門]pathlib.Pathクラスによるパス操作:Python入門(1/3 ページ) - @IT>https://atmarkit.itmedia.co.jp/ait/articles/1910/29/news019.html]] (2019/10/29) pathlibモジュールが提供するPathクラス、PurePathクラスなどを使って、ファイルやディレクトリを扱う方法を紹介する。 - [[Pythonでファイルの読み込み、書き込み(作成・追記) | note.nkmk.me>https://note.nkmk.me/python-file-io-open-with/]] withブロックを使うとブロックの終了時に自動的にクローズされる。閉じ忘れがなくなるので便利。 with open(path) as f: print(type(f)) ** ディレクトリ [#e1ed5012] - [[Python, pathlibでディレクトリ(フォルダ)の作成・削除 | note.nkmk.me>https://note.nkmk.me/python-pathlib-mkdir-rmdir/]] 引数exist_okをTrueとすると既存のディレクトリを対象としてもエラーにならない。 pathlib.Path('temp/dir').mkdir(exist_ok=True) - [[Python, pathlibでファイル名・拡張子・親ディレクトリを取得 | note.nkmk.me>https://note.nkmk.me/python-pathlib-name-suffix-parent/]] 拡張子はsuffilx属性で取得できる。ピリオド.付きの文字列となる。 - [[[Python]ディレクトリ内にある複数のファイルをソートして読み込む - Qiita>https://qiita.com/3000manJPY/items/6100452792e16d0ae921]] 今回はファイル名でソートされた状態で順番に読み込みたかったので解決法を調べました。 file_list = sorted(glob.glob('path/to/dir/*.txt')) * [[HTTP]] [#b6d459d9] - [[Python の HTTP クライアントは urllib.request で十分 - Qiita>https://qiita.com/hoto17296/items/8fcf55cc6cd823a18217]] 冷静になって考えると「その程度の用途なら urllib.request で十分では」と思うことは少なくない。 ** [[スクレイピング]] [#tc13ee45] - [[BeautifulSoup]] - [[[Python]株データのCSVファイルをスクレイピングで取得する | フリーランスに憧れて>https://free-free.site/post-650/]] 株の情報がCSVファイルとして公開されていますので、そこのスクレイピングを記事にしていこうと思います。 * [[日時]] [#xc36ca34] - [[Python日付型 - Qiita>https://qiita.com/motoki1990/items/8275dbe02d5fd5fa6d2d]] バージョンは、Python3です。 - [[Pythonで日付文字列からのdatetime変換やタイムゾーンの変更などをいい加減覚えたい - そうなんでげす>https://www.soudegesu.com/python/python-datetime/]] 少し邪道感ありますが、データ仕様(タイムゾーンが何か)を確認した後に文字列結合してしまうのが楽ちんです。 - [[ISO8601]]:[[Python3]]を参照 ** タイムゾーン [#w2964ee5] - [[ついカッとなって、Pythonで時刻文字列のタイムゾーン変換をまとめてみた | Developers.IO>https://dev.classmethod.jp/articles/python-time-string-timezone/]] datetimeだけでも目的の変換は達成できました。 datetimeだけを使ってUTCからJSTへの変換を行うコードは以下になります。 datetime_jst = datetime_utc.astimezone(datetime.timezone(datetime.timedelta(hours=+9))) - [[[Python] datetimeでタイムゾーンを扱う(pytz利用、UTC/JSTの変換、など) - YoheiM .NET>https://www.yoheim.net/blog.php?q=20181201]] JST/UTC変換を行う 上記の機能を用いることで、いろいろなタイムゾーンで、日付を表現できます。 * [[ログ]] [#f1c311e7] - [[Pythonのpprintの使い方(リストや辞書を整形して出力) | note.nkmk.me>https://note.nkmk.me/python-pprint-pretty-print/]] 標準ライブラリであるpprintモジュールを使うと、リスト(list型)や辞書(dict型)などのオブジェクトをきれいに整形して出力・表示したり、文字列(str型オブジェクト)に変換したりすることができる。 - [[ログ出力のための print と import logging はやめてほしい - Qiita>https://qiita.com/amedama/items/b856b2f30c2f38665701]] チュートリアルでは「logging.debug()やprintでログ出力できるよ」というひと通りの説明をした後に、より適切なベスト・プラクティスが書かれている - [[Pythonの関数の引数と戻り値のログ出力をデコレータで部品化する(Google Cloud Functions) | DevelopersIO>https://dev.classmethod.jp/articles/python-decorator-log-gcf/]] Pythonの関数を呼び出す時に渡す引数と、 その関数の戻り値のログ出力をデコレータで部品にしてみました。 - [[【Python】変数名と値を同時に表示する小技 - Qiita>https://qiita.com/yoshidashuntarou/items/f208c18fb54ba183790a]] 置換フィールド{}内に記述した変数の後に=をつけるだけです hoge = "Hello, Python!" print(f"{hoge=}") * [[SQL]] [#bb63a646] ** [[SQLite]] [#adc10fa0] - [[python3でsqlite3の操作。作成や読み出しなどの基礎。 - Qiita>https://qiita.com/saira/items/e08c8849cea6c3b5eb0c]] この記事にはpython3でsqlite3を操作して、データベースの作成や、編集の基礎的なことをまとめてます - [[csvファイルのデータからsqlite3データベースへうつす、内容の表示 - いももちのきもち>http://toricor.hatenablog.com/entry/2016/01/29/212418]] csvファイルでデータをもらった後、軽量なデータベースであるsqlite3にデータを移しました。 - [[[Python]株データのCSVファイルをSQLiteに格納する | フリーランスに憧れて>https://free-free.site/post-666/]] 取得した株データのCSVファイルをSQLiteに格納するプログラムを紹介します。 - [[How to get column names from Sqlite database table in Python>https://www.alixaprodev.com/2022/03/python-to-get-database-column-names.html]] Get column names from Sqlite database table in Python - [[SQLite3入門 | Python学習講座>https://www.python.ambitious-engineer.com/archives/745]] sqlite3.Rowを使用するとSELECT結果をカラム名で指定して取得することができます。コネクションオブジェクトのrow_factoryにsqlite3.Rowを設定します。 ** [[MySQL]] [#x1b49e2f] - [[[実装備忘録] Python3のpandasでMySQLにアクセスする方法 - Qiita>https://qiita.com/takahashi_yukou/items/10f1510c7b433e114e70]] MySQL公式パッケージ mysql-connector-python-rf がどうも良さそうである - [[Python 3 から MySQL を触る - Qiita>https://qiita.com/hoto17296/items/0cfe7cdd3c47b69cc892]] mysql-connector-python-rf は更新が止まっており、同じく MySQL 公式の mysql-connector-python というパッケージがあるらしいので注意 * [[グラフ]] [#ld43a0cf] - [[matplotlib]]を参照。 * [[コーディング規約]] [#vc7d31b5] - [[[Python入門]Pythonコーディングスタイルガイド:Python入門 - @IT>https://www.atmarkit.co.jp/ait/articles/1912/10/news045.html]] 関数名/変数名 ・英小文字を使用し、可読性を高めるときには単語間をアンダースコアでつなぐ - [[[Pythonコーディング規約]PEP8を読み解く - Qiita>https://qiita.com/simonritchie/items/bb06a7521ae6560738a7]] 本記事では個人的な解釈をしつつ、PEP8について読み解いてまとめてみます ** [[ドキュメント]] [#c2f66f92] - [[[Python]可読性を上げるための、docstringの書き方を学ぶ(NumPyスタイル) - Qiita>https://qiita.com/simonritchie/items/49e0813508cad4876b5a]] sphinx対応的に、書くとしたらNumPyかGoogleのスタイルどちらかがいいかな、という印象です。 - [[GoogleスタイルのPython Docstringの入門 - Qiita>https://qiita.com/11ohina017/items/118b3b42b612e527dc1d]] Python Docstringとは Pythonにおけるクラスや、メソッド(関数)についての説明を記載したコメント文のこと。 - [[Python - PukiWiki>https://www.zyx3000.com/pukiwiki/?Python#vc7d31b5]] 関数前に一つアンダースコアを付ける事により、関数を”内部用”に定義できます。 * 内包表記 [#y6cb06be] - [[Pythonのfor文, イテレータ, 内包表記 (Python3対応) | Netsphere Laboratories>https://www.nslabs.jp/python-for-keyword.rhtml]] これは、繰り返しではなくて、新しいリストを生成する。繰り返しじゃない。 パッと見、そうとう不思議な構文。for文とはまったく関係がない。基本的な構文は次のようになる [ 式 for 変数 in オブジェクト ] - [[pythonの内包表記を少し詳しく - Qiita>https://qiita.com/y__sama/items/a2c458de97c4aa5a98e7]] pythonには後置if文がありませんが、リスト内包表記に限っては(結果的にですが)書けます。 * アサーション [#ob94e4ce] - [[[Python] assert文で超お手軽テスト - Qiita>https://qiita.com/nannoki/items/15004992b6bb5637a9cd]] assert 条件式, 条件式がFalseの場合に出力するメッセージ - [[Pythonで本当に役立つ機能「アサーション」の使い方を解説!『Pythonトリック』から:CodeZine(コードジン)>https://codezine.jp/article/detail/12179]] assert(1 == 2, 'This should fail') この問題は、空ではないタプルがPythonでは常に真と評価されることと関係しています。 - [[python assert with and without parenthesis - Stack Overflow>https://stackoverflow.com/questions/3112171/python-assert-with-and-without-parenthesis]] assert(1==2, "hi") is parsed as assert (1==2, "hi"), which doesn't give an error because a non-empty tuple (False, "hi") isn't a false value, and there is no second parameter supplied to the keyword. * モジュール [#s88ad80f] - [[pythonで自作関数をモジュール化・パッケージ化 - Qiita>https://qiita.com/ren094275/items/5d42f7c6be8c5d3cd014]] それに従って自作関数のファイルが多くなってしまい管理が難しくなってしまいます.ここで登場するのがパッケージ化です. - [[Pythonの上位ディレクトリpath取得についてのメモ - Qiita>https://qiita.com/rebellious-wimp/items/3e3203239405180ab506]] 絶対パスを取得した後であれば、以下のようにしてsrcディレクトリ内のモジュールをimport可能。 - [[Python の __init__.py とは何なのか - Qiita>https://qiita.com/msi/items/d91ea3900373ff8b09d7#__init__py-%E3%81%AE%E5%BD%B9%E5%89%B2]] 1. __init__.py は、モジュール検索のためのマーカーとなる。 ** クラス [#ld3ec945] - [[Python基礎講座(13 クラス) - Qiita>https://qiita.com/Usek/items/a206b8e49c02f756d636]] コンストラクタは__init__()という名前で定義します。"_"を前後に2つです。 - [[Pythonでインスタンスの状態をダンプするにはvars()を使う - minus9d's diary>https://minus9d.hatenablog.com/entry/2015/08/02/204226]] vars(obj)は、objを辞書として扱ったときの値を返していると解釈できそうです。 dir()関数の使用用途としては、プログラマが対話的にオブジェクトが持つ属性の一覧を覗いて、使えそうなものを探ることのようです。 ** 変数 [#va1a8238] - [[「今書けるコード」が最速とは限らない、Pythonの様々な書き方を知る(2ページ目) | 日経クロステック(xTECH)>https://xtech.nikkei.com/atcl/nxt/column/18/02244/111800004/?P=2]] 変数iを「_」(アンダースコア)に書き換えています。このアンダースコアは、「使わない変数」であることを表します。 ** 関数名 [#h2230779] - [[実行中の関数・メソッド名を取得したい - Qiita>https://qiita.com/megmogmog1965/items/0b4ea3d58e34f1854158]] sys._getframe().f_code.co_name * 外部コマンド [#ae04eb9b] - [[Pythonからコマンドを呼び出す(Windows編) - Qiita>https://qiita.com/_akisato/items/d97b17064df158f0dea0]] os.systemを使うのが従来は一般的であったが,subprocessを使うのが現代的らしい. * ライブラリ [#s5054d7f] ** site-packages [#uc4f0575] - [[【Python】site-packagesのパスを確認する方法【pip install・pyenv】 - Qiita>https://qiita.com/chatrate/items/eb4b05cd1a6652529fd9]] pythonで何かしらのライブラリをpip installしたものはsite-packagesに入るわけですが、そのsite-packagesへのパスが知りたいそんなときのTIPS ** unittest [#n59d1b8c] - [[Python標準のunittestの使い方メモ - Qiita>https://qiita.com/aomidro/items/3e3449fde924893f18ca]] Pythonのunittest機能の使い方を簡単に記録したメモである。 -- [[unittest --- ユニットテストフレームワーク — Python 3.8.1 ドキュメント>https://docs.python.org/ja/3/library/unittest.html#module-unittest]] - [[Python 3 標準の unittest でテストを書く際のディレクトリ構成 - Qiita>https://qiita.com/hoto17296/items/fa0166728177e676cd36]] いくつかのパッケージの構成を見た限りでは、パッケージのディレクトリと同じ階層にテストディレクトリを作るのがセオリーらしい。 - 関連:[[ユニットテスト]] ** python-dotenv [#oc911621] - [[【GitHub】に載せたくない環境変数の書き方 Python - Qiita>https://qiita.com/hedgehoCrow/items/2fd56ebea463e7fc0f5b]] Pythonのdotenvは,python-dotenvと少し名前が違っている. ** pytz [#h098ded6] - [[Pythonで、pytzを使ったタイムゾーンの変換 - Narito Blog>https://narito.ninja/blog/detail/81/]] ** python-docx [#p6d6adaf] - [[python-docx — python-docx 0.8.10 documentation>https://python-docx.readthedocs.io/en/latest/#]] python-docx is a Python library for creating and updating Microsoft Word (.docx) files. - [[python-docxを使ってdocxファイルを書き換える - Qiita>https://qiita.com/butada/items/93ad2301348a4fe28b5c]] 構造を見ると、paragraphはDocument直下にあるだけでなく、tablesの中にもある -- コメント:デフォルトのプレースホルダの文言は読み取れない。ドキュメント内にプレースホルダが残っていても、一見区別が付かないので要注意。(2020/01/19) ** tqdm [#td57bfb3] - [[Python: tqdm で処理の進捗状況をプログレスバーとして表示する - CUBE SUGAR CONTAINER>https://blog.amedama.jp/entry/2018/07/23/080000]] 今回紹介する tqdm は、走らせた処理の進捗状況をプログレスバーとして表示するためのパッケージ。 ** [[OpenPyXL]] [#fb70c809] - [[Excel]]ファイルを扱う。 ** Pathlib [#s4264414] - [[Pathlibチートシート - Qiita>https://qiita.com/meznat/items/a1cc61edb1e340d0b1a2]] os.path VS pathlib 早見表 ** [[Subversion]] [#t260202f] - [[svn · PyPI>https://pypi.org/project/svn/]] The library wraps the svn commandline client, which should consequently be installed on the local system. ** logging [#l49005b6] - [[初心者脱出には避けて通れない、Pythonの「ログ」の取り方を学ぶ(3ページ目) | 日経クロステック(xTECH)>https://xtech.nikkei.com/atcl/nxt/column/18/02244/111800005/?P=3]] ログメッセージとともにファイル名や時間を表示する ** difflib [#aed2db38] - [[difflibで文字列の差分比較をする【Python】 | YukiPress>https://mat0401.info/blog/basic-python-difflib/]] difflibは文字列比較のために使うPython標準モジュールです。 - [[【Python】文字列差分検出 - Qiita>https://qiita.com/thistle_/items/878bd595048965a7cb30]] difflibモジュールのndiffメソッドで実現できる。 ** Requests [#p42ddee5] - [[Requestsで日本語を扱うときの文字化けを直す - Qiita>https://qiita.com/nittyan/items/d3f49a7699296a58605b]] response.encoding = response.apparent_encoding # この行を追加 apparent_encodingを呼び出すと、どうやらライブラリ使って、ちゃんと文字コードを判定するらしい。 -- 関連:[[BeautifulSoup]] - [[【Python】requestsマスター〜リトライ〜通信の例外処理まで - Qiita>https://qiita.com/azumagoro/items/3402facf0bcfecea0f06]] Session貼ってRetryも設定しちゃう気合の入った実行 - [[PythonモジュールRequestsのHTTPステータスコードについて | DevelopersIO>https://dev.classmethod.jp/articles/python-requests-status-code/]] >>> r.status_code 200 >>> r.status_code == requests.codes.ok True ** icecream [#rdd156bc] - [[print()でデバッグする必要がなくなるicecream #Python - Qiita>https://qiita.com/KENTAROSZK/items/4ef8b9e52c0883718b9f]] print()関数自体は単純ですが、データの型や表示の形を都度変えながらデバッグするのは面倒臭いことが多いと思います。 * 開発環境 [#l11d33e8] - [[VisualStudioCode]] - [[Pythonプロジェクトを快適にするために導入したツールとその設定 | DevelopersIO>https://dev.classmethod.jp/articles/shuntaka-python-tools/]] (2021/12/24) 普段別言語がメインが、急遽Pythonプロジェクトを作る必要があり、下記の要件がある人向けです * 関連 [#sdb1567a] ** [[Ruby]] [#g08635a2] - [[ruby でこう書くのは、python ならこう書く、のメモ - Qiita>https://qiita.com/Nabetani/items/50b0f6533a15d8fb2ae5]] #taglist(tag=Python)