影刀RPA 文件搜索技巧:快速定位文件
影刀RPA 文件搜索技巧快速定位文件作者林焱什么情况用什么硬盘上文件太多找不到——记得文件名的一部分但不知道在哪个文件夹、知道是Excel但不知道叫什么、想找最近修改的所有文档。在影刀RPA里用Python可以实现比Windows搜索更灵活的文件查找。适用场景快速查找文件、按条件搜索文件、跨目录搜索、文件内容搜索。怎么做拼多多店群自动化报活动上架按文件名搜索importosimportfnmatchfromdatetimeimportdatetime,timedeltadefsearch_by_name(root,pattern,recursiveTrue): 按文件名搜索 pattern: 通配符模式如 *.xlsx, *report*, *2026* results[]ifrecursive:fordirpath,_,filesinos.walk(root):forfinfiles:iffnmatch.fnmatch(f.lower(),pattern.lower()):results.append(os.path.join(dirpath,f))else:forfinos.listdir(root):iffnmatch.fnmatch(f.lower(),pattern.lower()):results.append(os.path.join(root,f))returnresults# 使用# 搜索所有Excel文件filessearch_by_name(rC:\Data,*.xlsx)# 搜索文件名包含report的文件filessearch_by_name(rC:\Data,*report*)# 搜索2026年的文件filessearch_by_name(rC:\Data,*2026*)多条件搜索defsearch_files(root,name_pattern*,extensionsNone,min_sizeNone,max_sizeNone,modified_afterNone,modified_beforeNone,content_keywordNone,max_results100): 多条件文件搜索 results[]fordirpath,_,filesinos.walk(root):forfinfiles:iflen(results)max_results:breakfilepathos.path.join(dirpath,f)# 1. 文件名匹配ifnotfnmatch.fnmatch(f.lower(),name_pattern.lower()):continue# 2. 扩展名匹配ifextensions:extos.path.splitext(f)[1].lower()ifextnotinextensions:continue# 3. 文件大小sizeos.path.getsize(filepath)ifmin_sizeandsizemin_size:continueifmax_sizeandsizemax_size:continue# 4. 修改时间mtimeos.path.getmtime(filepath)ifmodified_afterandmtimemodified_after.timestamp():continueifmodified_beforeandmtimemodified_before.timestamp():continue# 5. 内容搜索ifcontent_keyword:ifnotfile_contains_keyword(filepath,content_keyword):continueresults.append({文件名:f,路径:filepath,大小(KB):round(size/1024,1),修改时间:datetime.fromtimestamp(mtime).strftime(%Y-%m-%d %H:%M),文件夹:dirpath})returnresultsdeffile_contains_keyword(filepath,keyword):检查文件是否包含关键词仅文本文件text_exts[.txt,.csv,.json,.xml,.html,.py,.md,.log]extos.path.splitext(filepath)[1].lower()ifextnotintext_exts:returnFalsetry:forencodingin[utf-8,gbk]:try:withopen(filepath,r,encodingencoding)asf:contentf.read()returnkeyword.lower()incontent.lower()exceptUnicodeDecodeError:continueexcept:passreturnFalse# 使用找最近7天修改的、大于1KB的Excel文件resultssearch_files(rootrC:\Data,name_pattern*.xlsx,min_size1024,modified_afterdatetime.now()-timedelta(days7))importpandasaspd pd.DataFrame(results).to_excel(rC:\Data\搜索结果.xlsx,indexFalse)print(f找到{len(results)}个文件)Excel内容搜索defsearch_in_excel_files(folder,keyword,max_files50):在Excel文件中搜索关键词results[]files_processed0fordirpath,_,filesinos.walk(folder):forfinfiles:iffiles_processedmax_files:breakifnotf.endswith(.xlsx)orf.startswith(~$):continuefilepathos.path.join(dirpath,f)files_processed1try:importopenpyxl wbopenpyxl.load_workbook(filepath,read_onlyTrue,data_onlyTrue)forwsinwb.worksheets:forrowinws.iter_rows():forcellinrow:ifcell.valueandkeyword.lower()instr(cell.value).lower():results.append({文件:f,路径:filepath,工作表:ws.title,单元格:cell.coordinate,内容:str(cell.value)[:50]})break# 找到一个就够了else:continuebreakwb.close()exceptExceptionase:passreturnresults# 使用搜索所有Excel中包含张三的文件resultssearch_in_excel_files(rC:\Data,张三)print(f在{len(results)}个位置找到关键词)快速搜索工具defquick_find(root,keyword):快速搜索文件模糊匹配文件名results[]keyword_lowerkeyword.lower()fordirpath,_,filesinos.walk(root):forfinfiles:ifkeyword_lowerinf.lower():results.append({文件名:f,路径:os.path.join(dirpath,f),修改时间:datetime.fromtimestamp(os.path.getmtime(os.path.join(dirpath,f))).strftime(%Y-%m-%d)})# 按修改时间排序results.sort(keylambdax:x[修改时间],reverseTrue)returnresults# 使用resultsquick_find(rC:\Users\Desktop,报表)forrinresults[:20]:print(f{r[文件名]}-{r[修改时间]})print(f{r[路径]})影刀RPA搜索流程【输入文本】→ 用户输入搜索关键词 【设置变量】search_root rC:\Data 【执行Python代码】 results quick_find(yd_var[search_root], yd_var[keyword]) yd_var[search_results] results 【输出信息】 找到X个匹配文件 1. report_2026.xlsx - 2026-07-01 2. 季度报表.xlsx - 2026-06-30 ...有什么坑TEMU店群矩阵自动化运营核价报活动坑1搜索全盘太慢# 问题搜索整个C盘需要几分钟# 解决1限制搜索深度defsearch_limited_depth(root,pattern,max_depth5):限制深度的搜索rootos.path.abspath(root)fordirpath,dirnames,filesinos.walk(root):depthdirpath[len(root):].count(os.sep)ifdepthmax_depth:dirnames.clear()# 不再深入forfinfiles:iffnmatch.fnmatch(f.lower(),pattern.lower()):yieldos.path.join(dirpath,f)# 解决2排除系统目录SKIP_DIRS{Windows,Program Files,AppData,$Recycle.Bin,System Volume Information}fordirpath,dirnames,filesinos.walk(root):dirnames[:][dfordindirnamesifdnotinSKIP_DIRS]坑2搜索权限不足# 问题某些目录无权限访问os.walk报错# 解决忽略错误fordirpath,dirnames,filesinos.walk(root,onerrorlambdae:None):# onerror回调忽略错误forfinfiles:# ...坑3文件名大小写不一致# 问题搜索Report找不到report.xlsx# 解决统一转小写比较ifpattern.lower()infilename.lower():# 匹配坑4搜索结果太多内存溢出# 解决限制结果数量 分页显示results[]max_results1000fordirpath,_,filesinos.walk(root):forfinfiles:ifkeywordinf:results.append(os.path.join(dirpath,f))iflen(results)max_results:print(f结果超过{max_results}个停止搜索)breakiflen(results)max_results:break坑5中文文件名编码问题# 问题某些系统下中文文件名乱码# 解决确保用Unicode处理filepathos.path.join(dirpath,f)# Python 3自动处理# 输出时用print(filepath.encode(utf-8).decode(utf-8))