概要
昨日作成したImageJのJpeg保存コードですが、olympusで写真を撮った後にすぐ回すと、ファイル名が「画像_NNNN.tif.jpg」「画像_NNNN.tifMerge.jpg」とかになってややこしいので、元ファイルを再帰的にリネームすることにしました。
昨日のブログ↓
やったこと
VScodeになれるべく、VScodeで以下のコードを錬成しました。
実行すると、まずフォルダ指定用のブラウザが現れます。
フォルダを指定した後、コマンドライン上に
反復する数(撮影条件の数)
処理区の名前
撮影条件
を入れると自動で「1. GFP transfection 480nm.tif」みたいな感じで名前を入れてくれます。
Olympusの「画像_NNNN.tif」型専用です。
#! python3 # rename.py - "画像_NNNNN.tif"ファイルをforループを用いてrenameする from tkinter import Tk, messagebox, filedialog import os import glob import re import shutil # ファイル選択ダイアログの表示 root = Tk() root.title(u"フォルダーの選択") root.withdraw() iDir = os.path.abspath(os.path.dirname(__file__)) messagebox.showinfo("○×プログラム", "処理ファイルを選択してください") folder = filedialog.askdirectory(initialdir=iDir) # ファイルのリストを取り込む filelist = [] for f in glob.glob(folder + "/画像_*.tif"): filelist.append(os.path.split(f)[1]) # 反復回数を決める repeatNumber = input("反復回数を数字で入力してください:") if re.fullmatch(r"^\d+$", repeatNumber) == None: print("数字を入力してください") input("Enter キーで終了") exit() repeatNumber = int(repeatNumber) if len(filelist) % repeatNumber != 0: while True: yn = input("ファイル数が割り切れませんが続けますか?y/n:") if yn == "y": break elif yn == "n": exit() # n反復時の名前(処理名)を入力する sampleNameList = [] i = len(filelist) // repeatNumber n = 0 while n < i: while True: sampleName = input(str(n + 1) + "反復目の処理は?:") if sampleName != "": break sampleNameList.append(sampleName) n += 1 # ファイル数が割り切れないときの保険 sampleNameList.append("NN") space = " " print("処理名の入力終わり!") # 反復数1の時は撮影条の設定なし if repeatNumber != 1: # 反復内の撮影条件(BF、GFPなど)を入力する sampleConditionList = [] j = repeatNumber m = 0 while m < j: while True: sampleCondition = input(str(m + 1) + "回目の撮影条件は?:") if sampleCondition != "": break sampleConditionList.append(sampleCondition) m += 1 space = " " print("撮影条件の入力終わり!") else: j = repeatNumber sampleConditionList = [] space = "" # リネーム作業 k = 0 while k < len(filelist): shutil.move(folder + "/" + filelist[k], folder + "/" + str(k // j + 1) + ". " + sampleNameList[k // j] + space + sampleConditionList[k % j] + ".tif") k += 1
参考になったブログ