python 3.8 で find して、ディレクトリに os.sep を付けたい。

概要

  • find {$target_dir} したい。
  • find {$target_dir} ではついてないけどディレクトリにはtrailing slashがついていて欲しい。
    • ついでにいうと先頭の {$target_dir} 部分は要らない
  • 補足: python 3.8

ないの?

  • 分からない。ちょっと見当たらなかった。なのでチラ裏へのメモがてら。
    • find の方も実はtrailing slashをつけるのはoptionではなくてちょっとしたワンライナーが必要っぽいしエンジニア一般としては嬉しくない機能なのだろうか。
  • もし、あるよ!これだよ!ってのがあったら教えて欲しい。みんな欲しくないものなのかな。

実装

from pathlib import Path
target_dir  = Path(your, target, dir) # like (target_dir = Path('.','target_dir'))
def rel_trail(descendant_path):
    rel_path = descendant_path.relative_to(target_dir)
    # 先頭の {$target_dir} 部分は要らないので相対パスに
    if descendant_path.is_dir():
        trail = os.sep
    else:
        trail = ''
    return f"{rel_path}{trail}"
    # 今回やりたかったこと。上4行で末尾の文字を決定している
descendant_list = sorted(map(rel_trail, target_dir.rglob('*')))
# globした各要素に上の関数 rel_trail を作用させる
from pprint import pprint
pprint(descendant_list)
# 表示してみる

解説

  • descendant は子孫の意味です。
  • map によって返される map objectlist にしなくても sorted でソートして出すことができます。

歓迎するもの

  • 上記の機能が標準に存在しているならその機能についてのリファレンスを
  • 上記実装に関しての改善案。(些末な事ではなく設計全体に関してだと尚うれしい)
  • ないことを不思議に思う点での共感

久々の投稿

記事の投稿を最近してなかった。別に投稿するかどうか悩んでたとかそういう文化人的な話ではなく、投稿をしてなかった。vimのが適切に突っ込まれて云々とかいう話でもない。

vimの話の続き。ブコメで意味が分かるように書けよという突っ込みをひたすら受けた。意味がある程度汲めた人ですら、vimがおもちゃではない、というところを汲んで終わりだった。はっきり言って伝達能力不足で申し訳ない。

前提の共有が重要だとお前はバイト中に学ばなかったのかと自分に突っ込んでやりたい。前提(特に、何を優先すべきか、など価値観)の共有がなされなければ人の話というのは基本的に意味不明なのだ。

例えば、私はよくコーヒーを飲んでいるが、それを観測しただけの人が私はカフェインをとりたいのだと思っている可能性もある。カフェインをとれますよ、とエナジードリンクをおすすめしてきても、その観測した部分だけからは破たんしていないが、もし前提の共有なしに言われたら私は面食らうだろう。

ん、この例えわかりにく。まぁいいや、元の話に戻そう。

vimがおもちゃ的なエディタでないことに心底落胆した」というのが、人びとからは意味不明に見えるのだと思う。ここに、価値観を突っ込むと、

vimがおもちゃ的な(=触り心地を追求した)エディタでないことに心底落胆した」

という風になる。もちろん、今触っている人々はそうは思ってないだろうし、結論としては私が考える良い触り心地というのは多くの人は共感できないキモい触り心地かもしれない。(例えば私はwasdに指を置くとき人~小指の4本ともを使っていてキモがられたことがある。)

私がemacsを使っているのは、触り始めてしまった(学習コストを割くのが面倒だった)のと、端末で同じバインドが使える(脳内の状況スイッチコストが低い)という点が大きく、拡張性とか、直感的な触り心地はどうでもよかった。(実際、しばらく前まではhをglobalなdelete-backward-charにする1行以外は消しても困らなかった。)

私がevil(vim)に期待していたのは、hjklをあそこに大胆にも配置したのなら、他のキーも学習コストなんか度外視してただ単に理想の機能の並びを置くということだった。WinのC-zxcvはそういう例かなと思っている(yが遠いのでクソとか思うけど)。ここをおもちゃ的な、という表現をした。

ゲームでLボタンとRボタンの位置は対を成すことが望まれて作られているだろうし、Lが移動ならRは逆方向への移動だろう。もちろん、Lが2つあったりRが2つあったらその2つのほうが強い結合をしたりもするし、独立した機能が割り当てられたりもする。ただ、変な対応づきはしてほしくない。例えばLとRが2つずつあるときであっても、L1とR2、L2とR1が対応し、その2つの組は独立している、というような割り当てが行われるゲームはないだろう。(そんなことをする開発者が居たら首を掻っ切らなければならない。)

エディタであれば、対応するような機能同士を隣り合わせて置いたり、左右で逆の位置に置いたりする、というのがおもちゃ的な発想の適用の仕方である。

例えば、aの機能はuやeの位置に来てほしい。iと対応しているように私には感じられる。(対応してないと感じられる方もいるかもしれないが。)

幸い、vimでもemacsでも設定ファイルがある(ので割り当てなどは変更できる)ので、おもちゃにしていこうと思う。右手を移動とモード切替専用に、左手をその他便利機能に、みたいな方針にすると気持ちいいかな。すでにおもちゃにしたよ、という報告は非常にありがたいし、参考にしたい。

vimはクソエディタでしょ。

増田にでも書いてた方が多少安全かもしれない。それでも声を大にして言えば、vimはクソエディタでしょ。予防線を張るが、vimがクソじゃないと言うならお前のvimrcの行数を晒してみろ。

Evil使っていてもEsc遠い。C-gでインサートからノーマルに移行するようにした。たぶんEvilerでも好みがだいぶ分かれる設定だろう。

俺はおもちゃのように使えるエディタを期待してEvilを触ったんだ。なのに大本のvimときたら英語に浸食されてるじゃねーか。なーにがhjklで移動できるじゃ。そこで止まってるじゃねーか。C-zxcvでUndo,Cut, Yank, PasteができるWindowsを見習え。(選択しないと使えないとかキーを押す必要があるとかいろいろツッコミどころはある。)

おもちゃ的エディタ(または設定、または設定案でも)募集中。

ちなみに私はs使わないのでP(手前貼り付け)に割り当て。おもちゃ感向上。

あと、指を動かすのがつらいから数字をどうにか別の方法で代用したい。

どんどん更新が疎になっている。

更新が疎になっているのはいいことか悪いことか。更新が疎になっているのは悪いことだろう。更新が疎になるほど~~している、というのは言い訳に過ぎない。

どんなに時間がなくてもご飯は食べる、そういう重きの置き方をしているように、ほぼ毎日更新するぞと決めたのだから、疎になるのはよくない。特に、やめてしまうほどの理由をあげられるならやめてしまう理由をあげてやめるべきで、メリハリがない。

メリハリというのは非常に大事で、メリが特に重要である。もちろん、日ごろ自分が他人や自分に与えられる効果というのはハリによるものなのだが、メリで自分にいい影響を与えてないとどんどんと減衰してしまう。メリでしっかり回復しよう。

あ、今日寝坊したことの言い訳じゃないです。

そういえば、Evilの門戸をついに叩きました。

昨日更新忘れてたね。

昨日は友人にNintendo switchをプレイさせてもらっていたら時間がすべてなくなっていた。ちなみにぷよぷよテトリスSをしていたんだが、3DSに比べると圧倒的にぷよぷよ有利になっているね。初心者同士だったら圧倒的にぷよぷよのほうが強いんじゃないかな。

休日に休みをおう歌できてるか?

だらだら休み消化してそう。

もうちょっと休みに向けて予定たて、実行するとメリハリが出る?

自由人であるところの自分には、休日予定埋めたくないな。

この記事は謎テンションで書かれてる。維持をするのはもう無理だろう。