python3 批量查找目标文件,查找表格中的两列目标文件(n列都可以……)
import pandas as pd
import os
import shutil
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
print('\n')
# 查找目录
# rootdir = os.getcwd() #当面目录下查找
rootdir = r'F:\项目' # 指定目录下查找
print('本次查找路径为:' + rootdir)
print('\n')
input('请确认查找路径是否正确!若确认正确,请按回车开启查找文件!!!若路径不准确,请修改!')
logger.info('开始查找,')
# 列出指定目录下所有文件夹路径
def list_all_files(rootdir):
_files = []
list = os.listdir(rootdir) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)):
path = os.path.join(rootdir, list[i]) # 合并路径,将rootdir和list合并
if os.path.isdir(path):
_files.extend(list_all_files(path)) # 递归调用函数
if os.path.isfile(path):
_files.append(path)
return _files
def foundmage(i, filename):
df = pd.read_excel("getimage.xlsx") # 读取表格中的找到目标文件
Image = [] # 查找目标文件读取保存列表中
for index, row in df.iterrows():
Image.append(row[i]) # 读取添加到列表中
ids = list(set(Image)) # 目标文件列表除重
if len(Image) != 0:
# 创建保存目录
path_mb = os.path.join(os.getcwd(), filename)
if not os.path.exists(path_mb):
os.makedirs(path_mb)
savepath = os.path.join(os.getcwd(), filename) # 保存路径
notfound = [] # 创建找不到的目标文件列表
found = [] # 创建找到目标文件列表
file = list_all_files(rootdir) # 获取了指定目录下所有文件夹路径
for objectfile in ids: # 循环输出查找目标文件
n = 1 # 查找次数初始值
for filepath in file: # 循环输出文件路径
if str(objectfile) == str(filepath.split('\\')[-1]): # 判断目标文件和所有文件路径的文件去对比名称是否一致
shutil.copy(filepath, savepath) # 一致就去复制到指定目录下
logger.info('经过' + str(n) + '次查找,找到目标文件《' + objectfile + '》,已复制到当前《' + filename + '》')
found.append(objectfile)
break # 找到后就终止本次查找,进行下个文件查找
else:
if n == len(file): # 查找次数等于所有文件夹列表数时(找到最后一个路径也不是目标文件时),就判断找不到了
logger.error('未找到此文件,《' + str(objectfile) + '》')
notfound.append(objectfile) # 将未找到的目标文件添加到未找到的列表中
n += 1
print('\n')
if len(notfound) == 0: # 未找到列表等于0就判断,所有文件都找到了了
print(filename + '全部' + str(len(ids)) + '个目标文件,已找到' + str(len(found)) + '个文件,已全部查找完成,就没有找不到的文件…… 哈哈哈!!!!!!!')
print('*********************************************************************************************************************')
print('\n')
else:
print('警告!警告!警告!\n ' + filename + '全部' + str(len(ids)) + '个目标文件,已找到' + str(len(found)) + '个目标文件,有' + str(
len(notfound)) + "个目标文件没有找到!!!")
print(notfound) # 未找到列表不等于0时,输出为找到目标文件列表
print('*********************************************************************************************************************')
print('\n')
else:
logger.info(str(filename) + '中没有要查找的文件,若需要请在表格中添查找文件')
print( '*********************************************************************************************************************')
print('\n')
if os.path.exists(os.path.join(os.getcwd(), 'getimage.xlsx')):
logger.info('开始查找第一列目标文件!!!')
foundmage(0, '第一列目标文件')
print('\n')
logger.info('开始查找第二列目标文件!!!')
foundmage(1, '第二列目标文件')
else:
logger.info('当前文件夹下不存在“getimage.xlsx”表格文件,请创建文件,并添加查找目标文件名称到表格中……')
input('Press Enter to exit...')
需要批量查找目标文件
注:
1.从第二行开始读取,也就是目标文件的文字行不读取
2.Excel,格式为xlsx
3.查找路径需要自行修改