[Python] jashin.dictattrで辞書の要素を属性値として参照する

Pythonで辞書データをたくさん扱うコードを書いていると、辞書の要素をオブジェクトの属性みたいに参照したくなることがあります。

Javascriptなんかだと、辞書でも

data = {
    'name': 'value'
}

alert(data.name)

のように、辞書.名前 で参照できますが、Pythonの場合は

data = {
    'name': 'value'
}

print(data['name'])

となり、数が多いとちょっと面倒になります。

ありがち

久しぶりに、Raindrop.ioPython APIに手を入れてみた

先日から作りかけだったRaindrop.ioPython API、久しぶりに機能追加しました。Webアプリケーションなどでも使えるように、OAuth2で認証して、トークンのリフレッシュなんかもできるようになりました。

Flaskのサンプルアプリケーションはこちら

ほんらい、どってことない作業のハズで、requests-oauthlib を使ってサクッと終了する予定でした。

しかし、どうもリフレッシュがうまく動かない。requests-oauth

[JupyterLab] macOSでターミナルのalt+キーバインディングを使う

先日作成して JupyterLabに送ったパッチ がリリースされていたので、ちょっと紹介します。

これまで、macOS上のブラウザでJupyterLabのターミナルを使うとき、option+f などの、Optionキーを使ったバインディングが効きませんでした。「単語右」のつもりで ⌥f を入力すると、

ƒ

などと言う文字が出てきて、大変不愉快でした。

しかし、このパッチ が取り込まれた現在のJupyter Labでは、OptionキーをMetaキー

Github actionでvenv環境をキャッシュする

これまで、PythonのプロジェクトでGithub Actionを使うとき、こんな感じで仮想環境ごとキャッシュしていました。

# 仮想環境を作成
  - name: Create venv
    run: |
      python3 -m venv .venv

  # 仮想環境をキャッシュから復元
  - name: Cache venv dependencies
    uses: actions/cache@v1
    with:
      path: .venv
      key: venv-${{ runner.os }}-${{ hashFiles('requ
PyArrowとParquet

さて、ビッグデータ全盛の昨今、数ギガバイト程度のデータのやり取りは珍しくもなんともない時代になりました。交換用データファイルのフォーマットもいろいろな形式が使われていますが、ここではPythonで一般的に使われているファイル形式を簡単に検討してみましょう。

CSV

昔から、単純な表形式のデータにはCSVが使われてきました。Microsoft Excelをはじめとしてさまざまなツールでサポートされており、幅広い環境で利用できます。

データの作成

例として10万行・100カラムのデータを作成し、CSV形式で保存してみ

Fletsのルータ設定

ちょっとした実験で、自宅から外部のサーバとTCP接続を試みたところ、どうもうまくつながらなくて往生してました。接続先サーバのFirewallをすべて取っ払っても届きません。

しばらく苦戦した挙げ句、ためしに他のサーバから接続してみると成功。おお?と思って、自宅のPCから試すとつながらない。自宅の回線になんらかの制限がかかっているようなので、別のポートを試してみたらあっさりつながりました。

で、自宅の環境を確認してみると、AtermもNTT Fletsのルータもデフォルトでいくつかポートを制

Github Profileの設定

GithubのProfile画面 に自分の好きなREADME.mdファイルを表示できる、という話を見かけて、試してしました。ちょっと前に試したときには、自分のアカウントではこの機能を使えなかったようですが、いつの間にか使えるようになっていました。

Githubで自分のアカウント名と同じ名前のリポジトリ(私の場合なら atsuoishimoto) を作成し、つぎのように表示されれば機能が有効になっているようです。

Github profile

README.txtの生成

作成したリポジトリに README.md という名前

Flex 絵文字ビルダーの裏側

Flex 絵文字ビルダー というのを作りました。

SlackやDiscordにカスタム絵文字として登録して、リアクションに使う画像を生成するツールです。こんな画像を作れます。

仕組み

最初はこんなツールを作るつもりではなく、 どっかで<svg> 要素の中にHTMLを記述して、画像を <img> 要素に表示する、というコードを見かけて、自分で実験するためのコードでした。

こんな感じで <svg> を作っておいて、

<svg id="svg">
  <foreignObject width="128px" height=
asyncioのTaskに関する基礎知識

pythonのslackclientで非同期タスクを実行したらValueErrorになった話 で、たぶん asyncioのtaskを勘違いしてる気がするので簡単に解説。

要は asyncio.run にコルーチンではなくてTaskを渡したらエラーになった、という話ですが、このページでは、

Taskオブジェクト(asyncioが内部的にloopに委ねるときにwrapするオブジェクト)

と書かれていて、Taskオブジェクトをちょっと誤解している感じがします。このTaskの役割を理解したら納得がいくのではないかと思います。

まず

macOSでデフォルトのPATHは?

macOSで、デフォルトの PATH はどうやって決まってるんだろうか?

macOS Catalina 10.15.5で /etc/profile を見ると、こんな感じになっている

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
f

WindowsでCapsLockキーをCtrlに変更するPythonスクリプト

管理者として実行してください。

import winreg

key = 'System\CurrentControlSet\Control\Keyboard Layout'
scancodemap = (b'\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00'
               b'\x00\x00\x1d\x00:\x00\x00\x00\x00\x00')

with winreg.OpenKey(winreg.HKEY_LOCAL_MA

宣言と定義

いろんなプログラミング言語で、「宣言」と「定義」という用語が出てきます。

C言語などの用語だと、宣言(declaration) というのは、関数や変数の型などの情報を指定することを指します。

Pythonでは、global とか nolocal とかが宣言にあたります。

def func():
    global VAR # 変数VAR はグローバルと 「宣言」
    do_something(VAR)

定義(definition) は、実際に変数などの実体を作成することです。Pythonだと、var=100 とかになります。

var = 100 # 変

プログラムは分割しようという話

困難は群れで分けあえ - かばんちゃんさん

Python.jp Discordサーバを始めてから、早いものでもう2年ほど経ちました。登録者は2700名ほどで、初心者の質問なんかもちょくちょく流れてきます。

で、結構いろんな質問を見てるんですが、初心者はもちろん、プログラミングを始めてからけっこうたつような人でも、質問の内容がどうも怪しい、という人がいます。コンピュータやプログラミングの知識以前に、なにか問題を解決するときに、解決するための基礎的な手順ができていない感じの人たちです。プログ

Ansibleで、Playbookを作らずにロールを指定して実行

ansible "*" -m include_role -a name=ロール名 -i ホスト名,

[Python] 正しくない global の使い方

Pythonは名前だらけでは、Pythonの変数も関数も結局はみんな名前、という解説をしました。この特徴を使って、Pythonのちょっとおもしろい挙動を調べてみましょう。

Pythonの変数には、グローバル変数とローカル変数があります。関数の内部で定義した変数はローカル変数、それ以外はグローバル変数となります。

global_var = "これはグローバル変数です。"

def func():
    local_var = "これはローカル変数です"

グローバル変数は同じモジュール内なら

Pythonは名前だらけ

He would answer to "Hi!" or to any loud cry,
Such as "Fry me!" or "Fritter my wig!"
To "What-you-may-call-um!" or "What-was-his-name!"
But especially "Thing-um-a-jig!"

Pythonでもなんでも、プログラムを書くといろんな名前が出てきます。変数名や関数名、クラス名にモジュール名。

次のコードは、100 という数値に、number という名前をつけます。

In [32]:
numb

JupyterLab CMS化計画

私が管理するこのサイトや python.jpMiyadaikuというSSGを使って構築しています。

記事の執筆は普通にエディタを立ち上げてMarkdownやreStructuredTextで書いていましたが、最近、JupyterLab を使うようになってきました。MiyadaikuはJupyter NotebookからHTMLを作成できるようになっており、私が書くブログ記事の執筆には最適なPythonの実行・ドキュメント環境です。

Notebook以外にも、Preview付きMar

Pythonを闇改造した

思いつきをざっと書いて公開してしまうシリーズ2

Python 3.10 ではこれまでPythonのコンパイルの仕組みが変わり、従来の貧乏くさいLL(1)パーザから PEGパーザに切り替えられる予定になっています。

新パーザはすでにPython3.9に含まれていて、現在のPython 3.9b1でも試せるようになってますので、早速試してみました。

https://github.com/atsuoishimoto/cpython/pull/2

JSON Literal

Pythonのプログラムを書いていて、辞書オブジェクトを書くの

pastecat: クリップボードの画像をファイルに出力するツール

思いつきをざっと書いて公開してしまうシリーズ

クリップボードにコピーした画像を、ファイルに出力するPython製コンソールコマンド pastecat を作りました。

画像を、PNG形式で from_clipboard.png というファイルに出力するときは、

$ pastecat from_clipboard.png

とします。ファイル形式は、出力ファイルの拡張子で決定します。

画像を標準出力に出力するときは、-f オプションでファイル形式を指定します。

$ pastecat -f JPEG > from_clipboard.jpeg

インスト

静的サイトジェネレータ miyadaiku

このサイトは、静的サイトジェネレータ Miyadaiku で作っています。

miyadaikuは以前からJupyter Notebook からページを作成する機能を持っていましたが、あたらしくMiyadaikuのテーマを作成し、普通のブログっぽくノートブックを表示できるようにしてみました。

CSSを多少いじくって、Jupyterっぽさを隠しています。

このページもノートブックです。

先日、雑誌 Software Designの記事 を書かせていただいたとき、数十ページの原稿をすべて Jup

初投稿

新しいブログの、記念すべき初投稿です。

さしあたって、Python の小ネタをどうぞ

Python 3.8.2 (default, Mar 11 2020, 00:29:50)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance
このサイトについて

管理人について

フリープログラマ。開発・執筆・講演など、お仕事お待ちしております。

python.jp 管理人

旧ブログ

atsuoishimoto's diary

出版物:

雑誌など:

  • Pythonテキスト処
1