このブログは現在リブート中です。予告なく変更、削除、停止を行う場合があります。pythonのpathlibでリネームしたときに、すっごい馬鹿なミスしてエラーで彷徨ったので備忘録2019-01-16pythonのpathlibでリネームしたときに、すっごい馬鹿なミスしてエラーで彷徨ったので備忘録プログラミング備忘録pythonのpathlibでのリネーム作業において、小一時間無駄に彷徨ったのでメモ書き程度の備忘録とある複数のフォルダ(ディレクトリ)があるとして、その中に大量のファイルが入っている。それを一括リネームした上で親フォルダに移動させたかった。リネームしたあとに移動させようとしたらエラーが出た。しょうもないミスだったが、まぁ自戒を込めて備忘録にしておく。これは誰に見られることも想定していない落書きであるので注意。c...という具合に大量のファイルが入ってる。dir2_b...みたいにまとめたかった。後で直下に置くファイルを正規表現でフィルターかけるとかの複雑処理を足すかもしれんかったので、ちゃちゃっとpythonで書こうとしたわけだ。file」なんで??????printデバッグするとわかった当たり前の原因どうせ適当に使ったshutil(高水準ファイル操作ライブラリ)のせいだろうと決めつけ、あーでもないこーでもないとドツボにはまりだした。以前shutil.moveのエラーに引っかかってたのが尾を引いていた。(shutil.moveちゃんはなぜかファイルを親ディレクトリに移動しようとするとエラーを吐く。私の使い方が間違っているだけだと思う。なんで仕方ないのでcopyした後ディレクトリごと削除(rmtree)する。)=>shutil.moveのエラーも後日解決しました。単なるshutilのバグだったようです。tec.citrussin.com今回はちゃんとshutil.copy+shutil.rmtreeにしたのになぁ・・・。・・・ええ、まっとうなpython使いの方なら「こいつなにしてんだ。馬鹿じゃね?」ってなったと思う。当時の私は思考の袋小路。shutil.copyの使い方が悪いのかとshutilのドキュメントを読みに行く始末。わせると10倍近い時間がかかってることになる。にっちもさっちもいかなくなったので、とにかくステップごとの情報を見ることに。いえ、そもそもpythonでの作業自動化は、大抵はエディタでサクッと書くのでIDEを使っていないし使う気もない。仕方ないので、各所にprint()を差し込んで古式豊かなprintfデバッグでのローラー作戦を試みる。C言語時代を思い出すなぁ。Path(p).name+"_"+Path(a).name=>ここまで、Path(a)はtest/dir1/aを指している。test/dir1/dir1_aに変更しかし当然ながら、変数aは更新されておらず(・・・・・・・・)「Path(a)はtest/dir1/aを指している」まま。Path(p).parent)=>Path(a)を見に行くものの、すでにリネーム済みなのでtest/dir1/aは存在せず、dir1_aしか無い。=>エラー「そんなファイル無いです」あーなるほど。Path(a).renameはリネーム後の変数が指すパス位置を変更してくれないらしい。変更したら副作用出るもんね。ファイル操作のときは副作用が出るんだから、ちゃんとフローの流れは頭においておこうな!副作用が怖いならちゃんと関数型プログラミング系の書き方しような!いや、そういう問題じゃない気がする。file」のエラーメッセージだけでshutilちゃんのせいにしたのが悪かった。ごめんよshutilちゃん。教訓:簡単なプログラムでも横着しないで、エラーの原因を切り分けてから問題解決に移りましょう。23:26pythonのpathlibでリネームしたときに、すっごい馬鹿なミスしてエラーで彷徨ったので備忘録Tweet関連記事2019-03-24pythonでPathlibをつかってshutil.moveしたときにAttributeErrorす...細々としたファイルの操作はすべてpythonにまかせておきたい今...2019-03-23pythonのwin環境での実行時、ファイル削除しようとするとパーミッションエラー。(2)最新記事pythonでPathlibをつかってshutil.moveしたときにAttributeErrorすることを回避する。python備忘録pythonのwin環境での実行時、ファイル削除しようとするとパーミッションエラー。参加グループプログラミングスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。