如何移动文件夹中的图像,然后将其复制到与图像描述中的refDes各自的单独文件夹中



想象一下,文件夹中有很多tiff图像,需要通过读取tiff图像的内部内容(图像描述)对其进行排序并移动到相应的文件夹

当我试图编码,使其读取tiff图像中的图像描述,并希望移动图像中对应的refdes信息的图像,它显示这种类型的错误…

文件",第225行,在makedirsOSError: [WinError 123]文件名、目录名或卷标语法不正确

这是我正在制作的示例tiff图像,它是GDrive链接

注意output_folder是为了让我方便地导航输出文件夹,因此在输出文件夹内部是refdes命名文件夹这是我正在编写的代码

import os
import shutil
import tifffile
folder_path = "Input"
output_folder = "Output"
results = []
for filename in os.listdir(folder_path):
if filename.endswith(".tif") or filename.endswith(".tiff"):
file_path = os.path.join(folder_path, filename)
with tifffile.TiffFile(file_path) as tif:
description = tif.pages[0].description
metadata = dict(tuple(line.split('=', 1)) for line in description.splitlines())
result_dict = {
"filename": filename,
"integrationLevel": metadata['integrationLevel'],
"binningMode": metadata['binningMode'],
"resolution": metadata['resolution'],
"refDes": metadata['refDes']
}
results.append(result_dict)
for result in results:
refDes_folder = os.path.join(output_folder, result["refDes"])
if not os.path.exists(refDes_folder):
os.makedirs(refDes_folder)
shutil.copy2(os.path.join(folder_path, result["filename"]), refDes_folder)
print("Done")

在创建目录之前,可以用有效字符替换任何无效字符,例如下划线(_)。你可以使用re模块中的re.sub()方法来做到这一点,该方法允许你使用替换字符串替换字符串中出现的所有模式。

下面是一个示例,说明如何在创建目录之前修改代码以替换refDes值中的任何无效字符:

import os
import re
import shutil
import tifffile
folder_path = "Input"
output_folder = "Output"
results = []
for filename in os.listdir(folder_path):
if filename.endswith(".tif") or filename.endswith(".tiff"):
file_path = os.path.join(folder_path, filename)
with tifffile.TiffFile(file_path) as tif:
description = tif.pages[0].description
metadata = dict(tuple(line.split('=', 1)) for line in description.splitlines())
result_dict = {
"filename": filename,
"integrationLevel": metadata['integrationLevel'],
"binningMode": metadata['binningMode'],
"resolution": metadata['resolution'],
"refDes": metadata['refDes']
}
results.append(result_dict)
for result in results:
# Replace any invalid characters in the refDes value with an underscore
refDes_folder = os.path.join(output_folder, re.sub(r'[\/:*?"<>|]', '_', result["refDes"]))
if not os.path.exists(refDes_folder):
os.makedirs(refDes_folder)
shutil.copy2(os.path.join(folder_path, result["filename"]), refDes_folder)
print("Done")