在指定的文件夹中需要查找文件名中带有“虎杖”的所有文件,例如“333虎杖333.jpd”带有“虎杖”。且不需要显式的遍历整个文件夹,只需要利用 glob.glob(“与目标文件夹拼接的模糊文件路径”)即可找到对应文件夹。其中 “与目标文件夹拼接的模糊文件路径” = f"{目标文件夹地址”\\*{文件部分名}*“,其中*{文件部分名}*中的两个星号代表通配符。
1、现在excel长这样:
2、总的病人文件夹中文件命名包含“病人”的一部分,且不好对应
3、需要把每个病人对应的文件提取出来各自一个文件夹,命名方式可以diy。主要依赖 python的glob库,file_list = glob.glob(模糊文件地址),这里找出来的可能有多个对应文件,其返回是一个列表。代码如下:
import pandas as pd
from glob import glob
import shutil
import os
data = pd.read_excel('data.xlsx')
patients = data['病人']
path0 = '病人图片文件夹' # 所有病人图片所在文件夹
for patient in patients:
patient_incomplete_file_name = f"{path0}\\*{patient}*" # f-string 为 ”病人图片文件夹\\*病人名字*,其中*号为通配符,在病人名字之前和之后都有通配符
patient_file_list = glob(patient_incomplete_file_name) # glob.glob 找到的是一个列表,找不到是[], 可能找到多个对应的文件
print(f"病人{patient}对应的文件为: {patient_file_list}")
此时可以看到找到的文件为:
接下来实现将各个文件复制到指定文件夹:(在上面代码基础上改动最后两句)
data = pd.read_excel('data.xlsx')
patients = data['病人']
path0 = '病人图片文件夹' # 所有病人图片所在文件夹
for patient in patients:
patient_incomplete_file_name = f"{path0}\\*{patient}*"
patient_file_list = glob(patient_incomplete_file_name)
# print(f"病人{patient}对应的文件为: {patient_file_list}")
if not os.path.isdir(patient):
os.mkdir(patient) # 创建一个新的文件夹用于存放找到的文件,并以病人名字命名
for file in patient_file_list:
shutil.copy(file, patient) # 将文件复制到各个 patient 对应的文件夹,注意 shutil.copy(source, target)其中target可以是文件路径或者文件夹路径
解决!当然如果不想每次找到的是病人对应文件的列表,也可以用glob.iglob方法每次迭代一个出来,就不用写for循环了。