2019-05-20 [長年日記]

Linuxでファイル大量移動 [tech]

とかで検索すると

find FROM_PATH -type f  | xargs -I {} mv {} TO_PATH

みたいなのが検索結果の上の方にヒットするけど、
いやいや -I を指定したら -L 1 が自動的に適用されて、ファイルの個数分 mv コマンドが実行されるからめちゃくちゃ効率悪いよね??
という気持ちになる。

mv コマンドが、移動先を先頭にとればいいのだから……と調べてみたら、-t オプションがあった。

  • t, --target-directory=DIRECTORY

全ての SOURCE 引数を DIRECTORY に移動する

ということで、

find FROM_PATH -type f  | xargs -n 1000 mv -t TO_PATH

とかした方が、ファイル1000個につき mv コマンドが1回になって効率がよい。
私に限って言えばこちらの方が都合がよいことが多い。

ただしファイル名やディレクトリ名に空白が入っていない場合に限る。
一般論として、様々な条件下でも十分に動くコマンドとしては -I{} を使う方法を紹介するのはリーズナブルで、「間違い」とか「そんなもの紹介しちゃだめ」ということでは決してない。


2019-05-17 [長年日記]

指定必須なキーワード引数 [Python]

def foo(a, b, *, c):
    print(a)
    print(b)
    print(c)

と定義すると、

>>> foo(1, 2, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() takes 2 positional arguments but 3 were given

foo() takes 2 positional arguments but 3 were given
>>> foo(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() missing 1 required keyword-only argument: 'c'

foo() missing 1 required keyword-only argument: 'c'

となって、キーワード引数なしで呼び出せなくなる。


>>> foo(1, 2, c=3)
1
2
3

という呼び出し方をする必要がある。


つまり、c は"キーワードで指定することが必須"でかつ"デフォルトの値を持たない"引数になったわけ。


2019-04-02 [長年日記]

天になき星々の群れ [novel]

昔のジュニア小説の愉しさ、懐かしさ。

天になき星々の群れ フリーダの世界 (角川スニーカー文庫)

  • 作者: 長谷 敏司
  • 出版社/メーカー: KADOKAWA / 角川書店
  • 発売: 2013-10-01
  • ASIN: B00FZH3N52
  • メディア: Kindle版
  • amazon.co.jp詳細へ

大事なところで描写が荒い感じもしたけど、よかった。

それはそうと「あなたのための物語」がまだ読めてないのだが……。


2019-03-26 [長年日記]

objectのインスタンスには属性をセットできません [Python]

>>> x = object()

>>> x.foo = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'foo'

'object' object has no attribute 'foo'

なんで? と思った。

例えばobjectを継承しつつも一切なにもしないクラスを作って

>>> class Foo: pass

>>> x = Foo()

>>> x.foo = 1

とするのはなにも問題ない。

なぜobjectに属性を作る機能がないのか?
なぜobjectを継承しつつ特に何も動作を変えないクラスには属性を作る機能があるのか?
などということに長いこと引っかかっていたのだが、ドキュメントを読んでいて見つけてしまった。

注釈
object は __dict__ を 持たない ので、 object クラスのインスタンスに任意の属性を代入することはできません。
https://docs.python.org/ja/3.6/library/functions.html#object

しっかり明記してあった。

考えると、objectはすべてのクラスの親クラスなので、objectが__dict__を持っていたりすると

>>> a = int(100000000)

>>> b = int(100000000)

>>> a is b
False

>>> a.x = 'なんとか'; b.x = 'かんとか'  # これは実際にはエラーになる

だとか

>>> x = 1

>>> x.hoge = 'なんとか'  # これも実際にはエラーになる

だとか、組み込み型のあらゆる値に勝手に属性を差し込めることになってしまうので確かによくなさそう、と考え直したのだった。


2019-03-08 [長年日記]

十二人の死にたい子どもたち [novel]

13人いる! (ただ言いたかっただけ)

十二人の死にたい子どもたち

  • 作者: 冲方 丁
  • 出版社/メーカー: 文藝春秋
  • 発売: 2016-10-15
  • ASIN: 4163905413
  • メディア: 単行本
  • amazon.co.jp詳細へ

大変面白かったですが、冲方丁にしては切れ味がするどくはないかなと思った。
オチというトリックというか状況が順当な感じで想像を超えなかったからだけど、それでいい話なのでいいのですが。

(文庫版がない!?)