当前位置:   article > 正文

[python] 只知道文件名的一部分,查找匹配能对应的单个或者多个带有该部分的文件。_python通过文件部分名搜索文件

python通过文件部分名搜索文件

        在指定的文件夹中需要查找文件名中带有“虎杖”的所有文件,例如“333虎杖333.jpd”带有“虎杖”。且不需要显式的遍历整个文件夹,只需要利用 glob.glob(“与目标文件夹拼接的模糊文件路径”)即可找到对应文件夹。其中 “与目标文件夹拼接的模糊文件路径” = f"{目标文件夹地址”\\*{文件部分名}*“,其中*{文件部分名}*中的两个星号代表通配符。

1、现在excel长这样:
2、总的病人文件夹中文件命名包含“病人”的一部分,且不好对应
3、需要把每个病人对应的文件提取出来各自一个文件夹,命名方式可以diy。主要依赖 python的glob库,file_list = glob.glob(模糊文件地址),这里找出来的可能有多个对应文件,其返回是一个列表。代码如下:

  1. import pandas as pd
  2. from glob import glob
  3. import shutil
  4. import os
  5. data = pd.read_excel('data.xlsx')
  6. patients = data['病人']
  7. path0 = '病人图片文件夹' # 所有病人图片所在文件夹
  8. for patient in patients:
  9. patient_incomplete_file_name = f"{path0}\\*{patient}*" # f-string 为 ”病人图片文件夹\\*病人名字*,其中*号为通配符,在病人名字之前和之后都有通配符
  10. patient_file_list = glob(patient_incomplete_file_name) # glob.glob 找到的是一个列表,找不到是[], 可能找到多个对应的文件
  11. print(f"病人{patient}对应的文件为: {patient_file_list}")

此时可以看到找到的文件为:

接下来实现将各个文件复制到指定文件夹:(在上面代码基础上改动最后两句)

  1. data = pd.read_excel('data.xlsx')
  2. patients = data['病人']
  3. path0 = '病人图片文件夹' # 所有病人图片所在文件夹
  4. for patient in patients:
  5. patient_incomplete_file_name = f"{path0}\\*{patient}*"
  6. patient_file_list = glob(patient_incomplete_file_name)
  7. # print(f"病人{patient}对应的文件为: {patient_file_list}")
  8. if not os.path.isdir(patient):
  9. os.mkdir(patient) # 创建一个新的文件夹用于存放找到的文件,并以病人名字命名
  10. for file in patient_file_list:
  11. shutil.copy(file, patient) # 将文件复制到各个 patient 对应的文件夹,注意 shutil.copy(source, target)其中target可以是文件路径或者文件夹路径

解决!当然如果不想每次找到的是病人对应文件的列表,也可以用glob.iglob方法每次迭代一个出来,就不用写for循环了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/419137
推荐阅读
相关标签
  

闽ICP备14008679号