cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

ファイル名とフォルダ名を比較して、ファイルをフォルダの中に移動するスクリプトを吐くPythonプログラム

大量の計測データや写真、自炊したドキュメント、撮りためた動画などを、ファイル名を基に自動でフォルダに振り分けて整理してくれるプログラムがあるといろいろ便利です。

例えば、ABC, CDE, FGHというフォルダがあったとき、同じ階層にあるファイルのファイル名にフォルダ名が含まれていれば、それをフォルダ中に移動するスクリプトファイルをfileKeeper.batという名前で出力します。
fileKeeper.batをダブルクリックで実行すれば、移動が完了します。

> dir
ABC
CDE
FGH
ABC01.pdf
ABC02.pdf
ANCA.pdf
CDE.txt
01_FGH.mov

のような場合には、

move /-Y ABC01.pdf ABC
move /-Y ABC02.pdf ABC
move /-Y CDE.txt CDE
move /-Y 01_FGH.mov FGH

のような内容のfileKeeper.batファイルを出力します。
余り短いファイル名には引っかからないように、if len(k) > 3: で制限を書けています。

fileKeeper.py

# coding: utf-8

import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print 'defaultencoding:', sys.getdefaultencoding()

def cmp_len(s1, s2):
	return cmp(len(s1), len(s2))

if __name__ == "__main__":
	print(os.getcwd())

	DirList = []
	FileList = []
	for i in os.listdir(os.getcwd()):
		if os.path.isdir(i):
			DirList.append(i)
			print i
		elif os.path.isfile(i):
			FileList.append(i)

	# フォルダ名が長い順に調べるように、文字列長でソート
	DirList.sort(cmp=cmp_len, reverse=True)

	f = open("fileKeeper.bat", "w")

	for j in FileList:
		for i in DirList:
			# フォルダ名から特定の文字や文字列を無視
			k = i.replace('★','').replace('☆','').replace('●','').replace('○','')
			# あまりに短いフォルダ名は無視
			if len(k) > 3:
				if k in j:
					print j + " move to " + i
					f.write("move /-Y \"" + j + "\" \"" + i + "\"\n")
					break

	print "finished."

環境はWindows10上のpython2.7でテストしています。
なお、このプログラムでファイルが消えたなどの不具合が起きても、一切責任とれませんのでご注意ください。

今日の、2016年夏、アニメ化期待の漫画コミックTOP3!

1.あそびあそばせ


あそびあそばせ 2 (ヤングアニマルコミックス)

あそびあそばせ 2 (ヤングアニマルコミックス)


あそびあそばせ 1 (ジェッツコミックス)

あそびあそばせ 1 (ジェッツコミックス)

2. 天野めぐみはスキだらけ!

天野めぐみはスキだらけ! 3 (少年サンデーコミックス)

天野めぐみはスキだらけ! 3 (少年サンデーコミックス)


天野めぐみはスキだらけ! 2 (少年サンデーコミックス)

天野めぐみはスキだらけ! 2 (少年サンデーコミックス)


3. 月と指先の間