使用Python实现基于扫描布局的显微镜.tif文件批量重命名
实现思路与步骤
1. 核心需求梳理
从显微镜生成的generic_name_vXXzYYYY或generic_name_vXX_zYYYY格式TIF文件中,提取视野序号v和Z轴序列号z,按照7行13列的蛇形扫描规则,将v转换为[XX x YY]格式的坐标,最终重命名为generic_name_[XX x YY]_zYYYY。
2. 关键步骤拆解
(1)文件名解析
用正则表达式匹配文件名,精准提取v和z的数字部分,兼容带/不带下划线的两种格式:
import re # 匹配两种文件名格式:vXXzYYYY 或 vXX_zYYYY pattern = re.compile(r'generic_name_v(\d+)_?z(\d+)')
通过正则分组可获取v的整数(如v01→1)和z的整数(如z0001→1)。
(2)蛇形坐标转换
根据7行(Y轴)13列(X轴)的蛇形规则(奇数行从左到右,偶数行从右到左),编写坐标转换函数。以下是适配用户例子(v01对应00 x 00、v91对应13 x 07)的1-based版本:
def v_to_xy(v_num, cols=13, rows=7): # 计算1-based行号 row = (v_num - 1) // cols + 1 # 计算行内0-based位置 pos_in_row = (v_num - 1) % cols # 蛇形逻辑:奇数行X递增,偶数行X递减(1-based) if row % 2 == 1: x = pos_in_row + 1 else: x = cols - pos_in_row y = row # 格式化为两位字符串(如7→07,13→13) return f'{x:02d}', f'{y:02d}'
若需0-based坐标,去掉所有+1,将row = (v_num - 1) // cols即可。
(3)批量重命名文件
用os和glob模块遍历目标文件夹,对符合格式的文件执行重命名:
import os from glob import glob # 配置参数 target_dir = './your_tif_folder' # 替换为你的文件路径 cols = 13 rows = 7 prefix = 'generic_name' # 获取所有TIF文件 tif_files = glob(os.path.join(target_dir, '*.tif')) for file in tif_files: filename = os.path.basename(file) match = pattern.match(filename) if not match: print(f'跳过不符合格式的文件:{filename}') continue # 提取v和z的整数 v_num = int(match.group(1)) z_num = int(match.group(2)) # 转换为坐标字符串 x_str, y_str = v_to_xy(v_num, cols, rows) # 生成新文件名(保留z的4位格式) new_filename = f'{prefix}_[{x_str} x {y_str}]_z{z_num:04d}.tif' # 拼接路径 old_path = os.path.join(target_dir, filename) new_path = os.path.join(target_dir, new_filename) # 先打印测试,确认无误后取消注释rename print(f'{filename} → {new_filename}') # os.rename(old_path, new_path)
3. 注意事项
- 测试优先:先运行打印新旧文件名的代码,确认坐标转换正确后,再执行重命名操作。
- 避免覆盖:若存在同名文件,
os.rename会直接覆盖,可提前检查新路径是否存在。 - 格式兼容:正则中的
_?确保能匹配带/不带下划线的文件名,若有其他格式可调整正则表达式。
内容的提问来源于stack exchange,提问作者Rijndert Ariese
相关产品推荐
相关产品推荐

