なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

python で ファイル名をいっきに変更する

1.txt 2.txt 3.txt ....
というナンバリングのファイルの名前を
001.txt 002.txt 003.txtという風に変更したくなった。

linuxだったらシェルで正規表現とかつかって mv なんちゃらかんちゃら で一発で変更できそうな気がしいないでもないが、今回はwindowsだったためそうもいかない(いや、もしかしたらコマンドプロンプトでいけるかもしれないが、おそらくかなり記述するのに行数がいりそうだ、と思う)

そこでpythonをつかう。
globというモジュールをインポートすると uxix の ls みたいなこともできるのでいけそうだ。

で、完成したコード


import glob
import os

txtlist = glob.glob("*.txt")
for x in range(len(txtlist)):
i = txtlist[x].replace(".txt","")
newname = "0"*(3-len(i)) + i + ".txt"
print newname
os.rename(txtlist[x],newname)




だいたいみれば何やってるかわかると思うが、
txtlistには["1.txt","2.txt",.......]といった感じに.txtで終わるファイル名リストが格納される
それでそのリストの分だけforループしてiにそのリストの要素から".txt"を""に置換したもの、つまり"1"とか"2"とかが代入される。

そしてnewnameに変更したい名前("001.txt")とかを入れるわけだが、pythonでは "hello"*3 が"hellohellohello"になることをりようして3-len(i)つまり3-(ファイル名の数字の桁の数) だけ"0"を連結している。
そして i("1"とかがはいっている)も連結し、さらにさっき置換して消去した".txt"も連結することにより、みごと、変更したい名前の文字列をつくることができた。

さいごにそれをosモジュールのrenameで名前を変更してやればOKてこと。

もし1.txt 2.txt を 00001.txt 00002.txtと変更したくなったら、3-len(i)を5-len(i)にへんこうすればいいだけであり、結構汎用性があるかも
スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/62-dad1073b

この記事へのトラックバック

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。