Python で zip ファイルを解凍せずにリネームする

最近は寒い。iPhone 12 mini を買ったので、カメラを生かすべく外に出たいと思うも寒くて億劫になる。

仕事で急に締め切りが設定されてイラッとしたりもしている。チームで一つのものを作るならそれなりの手順や準備があるのだと思うのだけど、どうも上司がそのようなことを考えていない気がする。そのせいで手戻りが生じているのを見ると社会だなぁと思う。

週末は久しぶりに学生時代にお世話になった先輩と飲んだのだがとても楽しかった。業界を離れたからこそ、業界の人事について率直な意見を持てるようになった気がする。頭が良くて早く質の高い仕事はできるが一貫した自分の研究テーマを持てない人、問題を解くのは得意だけど作るのが苦手な人は苦労する傾向にある。

あとは三体Ⅲをちまちまと読み進めている。英語なのでとても時間がかかるが、ようやく8割近くまで読み終わった。中盤かなり盛り上がる場面があるのだけど、最近読んでいるところは落ち着いている。Ⅲの主人公は読んでる側としては結構好き嫌いが分かれる造形なんじゃないかと思う。僕はあまり好きではない。

話は変わるが、インターネットから落とした zip ファイルの名前を変えたいことがあると思う。zipファイルの名前は意味のない文字列だけど、内部のファイルなどはちゃんとした名前がついているのでそれらの情報からリネームしたいという状況。例えば、01234.zip という zip があって、中身は cat1.jpgcat2.jpg…などどなっている時のことだ。一旦解凍して名前を付け直せばいいかもしれないが、例えば python なら以下のようなコードでリネームできる

import zipfile
import subprocess

pathname = '01234.zip'
with zipfile.ZipFile(pathname) as z:
    new_name = z.infolist()[0].filename.split('.')[0]
    
    cmd = f'mv {pathname} {new_name}.zip'
    subprocess.call(cmd.split())

zipfileモジュールを使うと、zip ファイルの中の情報が取得できるので、それを使ってリネームする。infolist() は zip 内のファイルのリストになっており、filename オブジェクトがファイル名を持っている。リネームの際には単にシェルの mv コマンドを呼んでいる。先の例で言うと、 01234.zip というファイルが cat1.zip とリネームされるコードになっている。

実際にどのようなリネームをするかは zip 内のファイル構成に依存するので上のはあくまで一例。あと大抵ネットから落としてきたものはエンコーディングが様々なので、その辺の処理を泥臭く書く必要もある。

生活について

近況

就職して半年と少しが経った。それと同時に世の中がコロナに覆われ、僕の勤務先も原則在宅となった。だから自分にとっての変化が果たして就職をきっかけにしたものなのか、それとも行動様式の変化によるものなのかがうまく判別できない。この半年を振り返ってみると、以前よりもよく勉強するようになり、そしてお酒をあまり飲まなくなった。平日と休日の境目がこれまでよりもはっきりと目に映るようになった。

仕事も研究も変わらないなと思うのは結局人間の部分だ。相性の良い人間がいれば悪い人間もいる。ただリモート会議などでは他人の細かい表情が読み取れないので、負の印象が増幅する傾向にはあるのかなと思った。しかしそれは僕が捻くれていて、潜在的に相手の欠点を探しがちなだけかもしれない。 いわゆる理系の研究者に比べて、その辺の企業の人のコミュニケーション能力が高いかと言うと、そういうこともないように感じている。というか現代の研究の現場では大なり小なりコミュ力がないと即死するので(本当の天才は別だけど)、むしろ組織という枠組みで仕事を強いられる一般企業の方がそういう人でも生き残っていける(もしくは生き残ってしまう)のではないかという気さえする。

就職を機に引っ越したのだけど、そこが日当たりがかなり悪く、昼でも直接日差しが入らない。設備の割に家賃が安かったし、交通の便も良いし、どうせ昼間は家にいないから関係ないやと思って契約したのだが、まさかこんなことになるとは。日の光に当たらないと朝スッキリ目が覚めないし(それで休みの日はいつまでも寝てしまうこともある)、やっぱり気分に閉塞感が出る。次に引っ越すときは日当たりを最重要項目に入れようと思っている。

今日は特に予定がない三連休の真ん中で精神的にとても余裕がある。やはり三日休みがあると、部屋の掃除を念入りにしたり、放置していたOSのアップデートをしたり、だいぶ前に届いた公的手続きの封筒を開けてみようと思ったりする。そのついでに古いブログを消して新しいのを作ってみた。これからどれくらい頻繁に更新するかはわからないけど、適当にやっていこうと思う。タイトルは、散歩しているとよく良いアイディアが浮かぶということに因んでつけた。

最近良かった本

TENETに触発されて、時間物のSFを手に取ってみたくなった。死者が墓から蘇り、生者は次第に若返って最終的には女性の子宮に回帰するという現象が生じるようになった世界の話。主人公は、蘇った死者を墓から掘り出し、それを売る仕事をしている(この世界では蘇った死者は掘った人の所有物になるらしい)。ある日、ユーディ教という巨大新興宗教の教祖が生き返ることを察知した主人公は、ぼろ儲けできると思いいち早く掘り出したものの、その宗教にまつわる巨大な陰謀に巻き込まれて大変なことになる。ディックにしては珍しく話がストレートで、映画のように読めて面白かった。

ITエンジニアのための強化学習理論入門

ITエンジニアのための強化学習理論入門

  • 作者:中井 悦司
  • 発売日: 2020/07/17
  • メディア: 単行本(ソフトカバー)

強化学習という機械学習の一分野についての入門書。強化学習は、最近囲碁のすごい強い人を打ち負かしたことで有名になった。ゴール(囲碁の場合はゲームに勝つということ)だけ与えて、途中の戦略(何が良い手か)を全て機械に自発的に発見させるところが特徴。この本では強化学習の基礎的な部分を、ほぼフルスクラッチで実装して学ぶ。やっぱり自分の手を動かすとよく理解できる。最後には二次元のフィールドを障害物を避けながら進むエージェントを作成するのだけど、学習がうまくいって自分が訓練したエージェントが実際に障害物を避けて歩いているのをみるとなかなか感動する。